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/24 14:32] nicolas [Choix technologique] |
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 11: | Ligne 11: | ||
|libcrypto-1_1-x64.dll|OpenSSL Librairy|1.1.1.12|1.1.1u|Copyright @1998-2021 The OpenSSL Authors| 2023 | | |libcrypto-1_1-x64.dll|OpenSSL Librairy|1.1.1.12|1.1.1u|Copyright @1998-2021 The OpenSSL Authors| 2023 | | ||
|libssl-1_1-x64.dll|OpenSSL Librairy|1.1.1.12|1.1.1l|Copyright @1998-2021 The OpenSSL Authors| 2023 | | |libssl-1_1-x64.dll|OpenSSL Librairy|1.1.1.12|1.1.1l|Copyright @1998-2021 The OpenSSL Authors| 2023 | | ||
- | 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' | + | La version 3 d' |
==== Quelques ressources ==== | ==== Quelques ressources ==== | ||
* https:// | * https:// | ||
Ligne 33: | Ligne 33: | ||
Il est stocké dans une base de donnée externe à l' | Il est stocké dans une base de donnée externe à l' | ||
==== Stockage des mots de passe utilisateurs ==== | ==== Stockage des mots de passe utilisateurs ==== | ||
- | Les mots de passe des utilisateurs (on parle ici des utilisateurs du logiciel LoGeAs Web) sont stockés dans la base de donnée sous forme d'un hachage. Celui est fait de deux parties le mot de passe de l' | + | Les mots de passe des utilisateurs (on parle ici des utilisateurs du logiciel LoGeAs Web) sont stockés dans la base de donnée sous forme d'un hachage. Celui est fait de deux parties le mot de passe de l' |
- | Le mot de passe en clair de l' | + | Le mot de passe en clair de l' |
- | Le hachage est stocké dans la base principale de " | + | Le hachage est stocké dans la base principale de " |
- | La partie aléatoire (sel) est stocké dans une base de donnée externe à l' | + | La partie aléatoire (sel) est stocké dans une base de donnée externe à l' |
==== Les signatures ==== | ==== Les signatures ==== | ||
- | + | La signature mise en place ne concerne pas l' | |
- | + | ||
- | L' | + | |
- | + | ||
- | 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 ===== |