Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
certif:signature [2021/11/23 09:37] alexia [Architecture des fichiers signés par LoGeAs Signature] |
certif:signature [2021/11/25 09:32] (Version actuelle) nicolas |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
|{{: | |{{: | ||
- | ====== | + | ====== |
En vue de la certification NF 552, et suite à l' | En vue de la certification NF 552, et suite à l' | ||
* utilisé une bibliothèque unique, suivi et reconnu | * utilisé une bibliothèque unique, suivi et reconnu | ||
Ligne 7: | Ligne 7: | ||
===== La bibliothèque sur laquelle se base LoGeAs Web ===== | ===== La bibliothèque sur laquelle se base LoGeAs Web ===== | ||
- | LoGeAs se base pour toute laa partie crypto sur deux dll externes | + | LoGeAs se base pour toute la partie crypto sur deux dll externes |
- | ^Fichier^Description du fichier^Version du ficher^Version du produit^Copyright^ | + | ^Fichier^Description du fichier^Version du ficher^Version du produit^Copyright^Fin de support par OpenSSL^ |
- | |libeay32.dll|OpenSSL | + | |libcrypto-1_1-x64.dll|OpenSSL Librairy|1.1.1.12|1.1.1u|Copyright @1998-2021 The OpenSSL |
- | |ssleay32.dll|OpenSSL | + | |libssl-1_1-x64.dll|OpenSSL Librairy|1.1.1.12|1.1.1l|Copyright @1998-2021 The OpenSSL |
- | Remarque : Il ne s'agit pas la dernière version d' | + | Remarque : Il ne s'agit pas la dernière version d' |
+ | La version 3 d' | ||
==== Quelques ressources ==== | ==== Quelques ressources ==== | ||
* https:// | * https:// | ||
* https:// | * https:// | ||
+ | * https:// | ||
- | ===== Problématique ===== | ||
- | La problématique initiale de la signature est d' | ||
- | Pour cela on peut utiliser un algorithme de cryptographie à clef asymétrique : en effet ce type d' | ||
===== Choix technologique ===== | ===== Choix technologique ===== | ||
- | + | ==== Chaine aléatoire ==== | |
- | L' | + | A plusieurs reprise lors des processus |
- | + | < | |
- | La signature mise en place ne concerne pas l' | + | Les tailles prise en compte sont : |
+ | ^Objet^Taille en caractère^ | ||
+ | |Mot de passe des bases de données|70| | ||
+ | |Sel pour le cryptage des mots de passe utilisateurs|10| | ||
+ | |Mot de passe des certificats; | ||
+ | ==== Le certificat ==== | ||
+ | Le certificat généré pour signer dans l' | ||
+ | Il est stocké dans une base de donnée externe à l' | ||
+ | ==== Stockage des mots de passe utilisateurs ==== | ||
+ | Les mots de passe des utilisateurs | ||
+ | Le mot de passe en clair de l' | ||
+ | Le hachage est stocké dans la base principale de " | ||
+ | La partie aléatoire (sel) est stocké dans une base de donnée externe à l' | ||
+ | ==== Les signatures ==== | ||
+ | La signature mise en place ne concerne pas l' | ||
Le fait de rendre accessible directement les données encryptées pourrait également rendre l' | Le fait de rendre accessible directement les données encryptées pourrait également rendre l' | ||
Pour contrer ces deux problèmes majeurs, une solution existe : le hachage. C'est une fonction réductrice qui nous permettra de calculer un « hash » qui est une empreinte des données qu'on lui a envoyé. En effet ce n'est qu'une empreinte, bien que la fonction soit déterministe, | Pour contrer ces deux problèmes majeurs, une solution existe : le hachage. C'est une fonction réductrice qui nous permettra de calculer un « hash » qui est une empreinte des données qu'on lui a envoyé. En effet ce n'est qu'une empreinte, bien que la fonction soit déterministe, | ||
Bien que ce hash ne nous permette pas de récupérer les informations initiales, il va nous permettre de les identifier avec certitude : en effet les risques de collision (que deux données différentes donnent le même hash) sont faibles, et les mêmes données donneront toujours le même hash. Afin de réduire la taille de notre signature, nous allons donc hasher les données avant de signer le hash final, ceci nous permettra effectivement de confirmer l' | Bien que ce hash ne nous permette pas de récupérer les informations initiales, il va nous permettre de les identifier avec certitude : en effet les risques de collision (que deux données différentes donnent le même hash) sont faibles, et les mêmes données donneront toujours le même hash. Afin de réduire la taille de notre signature, nous allons donc hasher les données avant de signer le hash final, ceci nous permettra effectivement de confirmer l' | ||
- | |||
Logeas utilise comme fonction de **hachage l' | Logeas utilise comme fonction de **hachage l' | ||
+ | === Extrait du code === | ||
+ | Appel de la procédure avec les paramètres : | ||
+ | |Data|Qui contient la chaine à signer| | ||
+ | |Pivatekey|La partie privé du certificat| | ||
+ | |HasDigest|La méthode de hachage, **on utilise SHA 384**| | ||
+ | \\ | ||
+ | < | ||
+ | var | ||
+ | Signature: array [0..8000] of AnsiChar; | ||
+ | Etype: PEVP_MD; | ||
+ | PkeyCtx: PEVP_PKEY_CTX; | ||
+ | DigestCtx: PEVP_MD_CTX; | ||
+ | SigLen: size_t; | ||
+ | Ret, keytype: integer; | ||
+ | begin | ||
+ | Result := ''; | ||
+ | if not Assigned(PrivateKey) then | ||
+ | Raise EDigestException.Create(' | ||
+ | keytype := EVP_PKEY_base_id(PrivateKey); | ||
+ | if (keytype <> EVP_PKEY_RSA) and (keytype <> EVP_PKEY_EC) and | ||
+ | (keytype <> EVP_PKEY_ED25519) and (keytype <> EVP_PKEY_RSA_PSS) then | ||
+ | Raise EDigestException.Create(' | ||
+ | |||
+ | DigestCtx := EVP_MD_CTX_new; | ||
+ | PkeyCtx := Nil; | ||
+ | SigLen := SizeOf(Signature); | ||
+ | try | ||
+ | Etype := IcsSslGetEVPDigest(HashDigest); | ||
+ | if keytype = EVP_PKEY_ED25519 then | ||
+ | EType := Nil // Needs 1.1.1 | ||
+ | else if NOT Assigned(Etype) then | ||
+ | Raise EDigestException.Create(' | ||
+ | Ret := EVP_DigestSignInit(DigestCtx, | ||
+ | if (Ret <= 0) then RaiseLastOpenSslError(EDigestException, | ||
+ | |||
+ | ret := EVP_DigestSign(DigestCtx, | ||
+ | if (Ret <= 0) then RaiseLastOpenSslError(EDigestException, | ||
+ | if SigLen > 0 then begin | ||
+ | SetLength(Result, | ||
+ | Move(Signature[0], | ||
+ | end; | ||
+ | finally | ||
+ | EVP_MD_CTX_free(DigestCtx); | ||
+ | end; | ||
+ | end; | ||
+ | </ | ||
+ | // | ||
+ | Pour les explications des fonctions d' | ||
===== Architecture des fichiers signés par LoGeAs Signature ===== | ===== Architecture des fichiers signés par LoGeAs Signature ===== | ||
- | |||
Un fichier signé par LoGeAs Signature est un conteneur au format [[https:// | Un fichier signé par LoGeAs Signature est un conteneur au format [[https:// | ||
{{: | {{: | ||
(le format source de cette image est dans le dossier de certification) | (le format source de cette image est dans le dossier de certification) | ||
+ | ==== Le fichier " | ||
+ | D'un format facilement lisible (format descendant du format de Windows) il comprends : | ||
+ | ^Section^Identification^Contenu^ | ||
+ | |Editeur|Nom|Logeas Informatique| | ||
+ | |Editeur|Adresse|22 rue Saint Genest - 31800 LABARTHE INARD| | ||
+ | |Logiciel|Nom|Nom du logiciel qui a réalisé la signature| | ||
+ | |Serveur|Version|Version du logiciel| | ||
+ | |Serveur|Nom|Nom du serveur hébergeant la solution| | ||
+ | |Signature|Version|Version interne de la signature| | ||
+ | |Signature|Type|Type de la signature utilisée| | ||
+ | |Signature|Certificat|Type de certificat| | ||
+ | |Signature|Dll-nom|Nom de l' | ||
+ | |Signature|Dll-organisme|Organisme source| | ||
+ | |' | ||
+ | |Signature|Data|Signature du fichier " | ||
+ | |Signature|Information|https:// | ||
+ | |Signature|Date|Date de la signature| | ||
===== Architecture des fichiers signés par LoGeAs Signature ===== | ===== Architecture des fichiers signés par LoGeAs Signature ===== | ||
===== Manipulation des fichiers signés ===== | ===== Manipulation des fichiers signés ===== |