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 Dernière révision Les deux révisions suivantes | ||
certif:signature [2021/11/24 14:39] nicolas [Les signatures] |
certif:signature [2021/11/24 15:34] nicolas [La bibliothèque sur laquelle se base LoGeAs Web] |
||
---|---|---|---|
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 38: | Ligne 38: | ||
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 === | === 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 | var | ||
Signature: array [0..8000] of AnsiChar; | Signature: array [0..8000] of AnsiChar; | ||
Ligne 77: | Ligne 76: | ||
EType := Nil // Needs 1.1.1 | EType := Nil // Needs 1.1.1 | ||
else if NOT Assigned(Etype) then | else if NOT Assigned(Etype) then | ||
- | Raise EDigestException.Create(' | + | Raise EDigestException.Create(' |
- | GetEnumName(TypeInfo(TEvpDigest), | + | |
Ret := EVP_DigestSignInit(DigestCtx, | Ret := EVP_DigestSignInit(DigestCtx, | ||
- | if (Ret <= 0) then RaiseLastOpenSslError(EDigestException, | + | if (Ret <= 0) then RaiseLastOpenSslError(EDigestException, |
- | ' | + | |
- | { send an algorithm specific control operation to context } | + | ret := EVP_DigestSign(DigestCtx, |
- | { V8.64 these were never called since PkeyCtx was never set due to | + | if (Ret <= 0) then RaiseLastOpenSslError(EDigestException, |
- | | + | |
- | any differece to the output so not yet used } | + | |
- | (* if PkeyCtx <> Nil then begin | + | |
- | + | ||
- | // pending, 3.0 uses APIs not macros, need to create in OverbyteIcsSSLEAY | + | |
- | + | ||
- | { do we really need to set digest type?? } | + | |
- | | + | |
- | if EVP_PKEY_CTX_ctrl(PkeyCtx, | + | |
- | EVP_PKEY_CTRL_MD, | + | |
- | RaiseLastOpenSslError(EDigestException, | + | |
- | ' | + | |
- | + | ||
- | { set specific EC curve NID} | + | |
- | if (keytype = EVP_PKEY_EC) then begin | + | |
- | // | + | |
- | if EVP_PKEY_CTX_ctrl( | + | |
- | | + | |
- | EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, | + | |
- | RaiseLastOpenSslError(EDigestException, | + | |
- | ' | + | |
- | end; | + | |
- | { pending, may need to set RSA PSS stuff } | + | |
- | + | ||
- | end; *) | + | |
- | + | ||
- | | + | |
- | | + | |
- | if (Ret <= 0) then RaiseLastOpenSslError(EDigestException, | + | |
- | 'Failed to finalise signing digest' | + | |
if SigLen > 0 then begin | if SigLen > 0 then begin | ||
SetLength(Result, | SetLength(Result, | ||
Ligne 123: | Ligne 90: | ||
end; | end; | ||
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 ===== |