Dans l'article précédent «Jetons PKCS # 11: certificats et clés privées », nous avons examiné comment associer de maniÚre unique le trio certificat x clé publique x clé privée stockée sur le token / carte à puce avec l'interface PKCS # 11 v.2.40. Dans cet article, nous parlerons de la génération de paires de clés. Nous nous appuierons, comme la derniÚre fois, sur «GOST R 34.10-2012 Information Technology. Sécurité des informations cryptographiques. Les processus de formation et de vérification des signatures numériques électroniques . »Qu'est-ce qu'une paire de clés?
La paire de clĂ©s comprend deux clĂ©s:- / /Private key â , . / ;
- / / Public key â , , .
Il convient de rappeler que les clés privées et publiques ne sont pas seulement leurs valeurs (pour la clé publique GOST R 34.10-2001, elle est de 512 bits), mais aussi les paramÚtres du schéma de signature numérique (article 5.2 de GOST R 34.10-2012 ). à l'avenir, pour simplifier, nous appellerons les paramÚtres du schéma de signature numérique les paramÚtres (cryptoparamÚtres) de la paire de clés.La clé publique de la signature est calculée comme la valeur d'une fonction de la clé privée, mais la connaissance de la clé publique rend impossible la détermination de la clé privée.Pour les paires de clés GOST R 34.10-2001 et GOST R 34.10-2012 avec une longueur de clé privée de 256 bits (respectivement, une clé publique est de 512 bits), les paramÚtres cryptographiques suivants sont définis:- id-GostR3410-2001-CryptoPro-A-ParamSet;
- id-GostR3410-2001-CryptoPro-B-ParamSet;
- id-GostR3410-2001-CryptoPro-C-ParamSet;
- id-GostR3410-2001-CryptoPro-XchA-ParamSet;
- id-GostR3410-2001-CryptoPro-XchB-ParamSet.
Pour les paires de clés GOST R 34.10-2012 avec une longueur de clé privée de 512 bits (respectivement, une clé publique est de 1024 bits), les paramÚtres cryptographiques suivants sont définis ("Technologies de l'information. Protection cryptographique des informations. ParamÚtres de courbe elliptique pour les algorithmes et protocoles cryptographiques"):- id-tc26-gost-3410-2012-512-paramSetA;
- id-tc26-gost-3410-2012-512-paramSetB.
La composition des cryptoparamÚtres est définie dans la clause 5.2 de GOST R 34.10-2012 . Cette structure comprend un q premier - l'ordre du sous-groupe du groupe de points de la courbe elliptique:Et il détermine la longueur de la clé privée / publique et l'exactitude de la clé privée:
- la longueur de la clé privée est de 256 bits;
- La longueur de la clĂ© privĂ©e est de 512 bits.Et donc, la clĂ© publique est obtenue Ă partir de la clĂ© privĂ©e.Et d'oĂč vient la clĂ© privĂ©e?
Pour obtenir une clĂ© privĂ©e, vous devez d'abord dĂ©cider de la durĂ©e de la clĂ© privĂ©e (256 ou 512 bits), puis dĂ©cider des paramĂštres cryptographiques de la paire de clĂ©s. Maintenant, nous prenons le capteur de nombre alĂ©atoire et obtenons un nombre alĂ©atoire de la longueur correspondante. En fait, ce nombre alĂ©atoire devrait devenir la valeur d de la clĂ© privĂ©e (clĂ© de signature d). Cette valeur doit satisfaire la rĂšgle suivante:0 <d <q , oĂč q est un nombre premier parmi les cryptoparamĂštres.Et si cette condition n'est pas remplie? Si d == 0 , alors gĂ©nĂ©rez simplement un nouveau nombre alĂ©atoire. Sinon, il suffit de prendre le reste de la division par entier de la valeur de d , qui dĂ©passe q , parq (d% q) . Le reste deviendra la valeur de la clĂ© privĂ©e.C'est pourquoi le rĂ©gulateur (FSB de Russie) fait des demandes spĂ©ciales sur le capteur de nombre alĂ©atoire.Comme exemple de la source principale pour remplir le tampon:- les nombres alĂ©atoires comprennent:
- registre TSC du processeur - compteur d'horloge du processeur;
- Compteur horaire GTC
- compteur d'incrémentation automatique dans un thread séparé;
- fonction standard rand ();
- coordonnées de la souris.
Comme sources supplĂ©mentaires pour remplir ce tampon peuvent ĂȘtre:- Le compteur de processus en mode utilisateur;
- Minuterie haute résolution Windows.
Ainsi, pour que la carte Ă puce / jeton PKCS # 11 gĂ©nĂšre une paire de clĂ©s Ă l'intĂ©rieur d'elle-mĂȘme, il est nĂ©cessaire d'avoir une carte Ă jeton / Ă puce avec un capteur de nombre alĂ©atoire matĂ©riel intĂ©grĂ© qui rĂ©pond aux exigences du contrĂŽleur. Et ce n'est qu'alors que nous pourrons parler de la non-suppression de la clĂ© privĂ©e.Pour gĂ©nĂ©rer une paire de clĂ©s, la fonction C_GenerateKeyPair est utilisĂ©e . En fonction de la paire de clĂ©s (avec quelle longueur de clĂ© privĂ©e est de 256 ou 512 bits) que nous gĂ©nĂ©rons, le mĂ©canisme appropriĂ© y sera utilisĂ©:- CKM_GOSTR3410_KEY_PAIR_GEN pour une paire de clĂ©s avec une clĂ© privĂ©e de 256 bits;
- CKM_GOSTR3410_512_KEY_PAIR_GEN pour une paire de clés avec une clé privée de 512 bits.
Lors de la génération d'une paire de clés, ses attributs sont définis, par exemple, les paramÚtres cryptographiques:Nous nous intéressons aux attributs de récupération de clé privée.
Il s'agit auparavant de l'attribut CKA_SENSITIVE, qui est chargĂ© d'obtenir la valeur de la clĂ© privĂ©e. Si la valeur de l'attribut CKA_SENSITIVE est dĂ©finie sur CK_TRUE, la clĂ© privĂ©e ne peut pas ĂȘtre extraite du jeton en clair. Le deuxiĂšme attribut CKA_EXTRACTABLE vous permet d'obtenir la clĂ© privĂ©e sous forme cryptĂ©e. Pour ce faire, il doit ĂȘtre dĂ©fini sur CK_TRUE.La dĂ©finition de l'attribut CKA_SENSITIVE sur CK_TRUE et l'attribut CKA_EXTRACTABLE sur CK_FALSE lors de la gĂ©nĂ©ration de la paire de clĂ©s rendent la clĂ© privĂ©e complĂštement irrĂ©cupĂ©rable. La possibilitĂ© de dĂ©terminer si la clĂ© est exportable est disponible dans le navigateur Redfox:
Quelqu'un dira - et si nous modifions les valeurs de ces attributs. En rĂšgle gĂ©nĂ©rale, cela ne peut pas ĂȘtre fait, la protection ne peut pas ĂȘtre abaissĂ©e, tout comme «vous ne pouvez pas abaisser le degré». De la mĂȘme maniĂšre, vous pouvez rendre la clĂ© privĂ©e non rĂ©cupĂ©rable aprĂšs son importation dans le token (Ă moins bien sĂ»r que le token / carte Ă puce autorise l'importation). AprĂšs avoir créé (ou pendant la crĂ©ation) l'objet CKO_PRIVATE_KEY, vous devez dĂ©finir CKA_SENSITIVE = CK_TRUE et l'attribut CKA_EXTRACTABLE = CK_FALSE .Dans ce dernier cas (lors de l'importation), il convient de garder Ă l'esprit que bien que la clĂ© privĂ©e soit devenue non rĂ©cupĂ©rable, elle est apparue de cĂŽtĂ© (par exemple, Ă partir de PKCS # 12 ), et il n'y a aucune garantie qu'il n'y a pas de doublon ailleurs.Et ici, il ne ferait pas de mal de vous rappeler, cher lecteur, quela sĂ©curitĂ© n'est assurĂ©e que par un COMPLEXE de mesures organisationnelles et techniques . Par consĂ©quent, cela ne fonctionnera pas pour combler les trous dans la sĂ©curitĂ© de l'organisation au dĂ©triment des moyens techniques et vice versa - tout devrait ĂȘtre coordonnĂ© organiquement. Y compris, lors de l'accĂšs Ă la valeur de la clĂ© privĂ©e.Assurez-vous que le jeton / la carte Ă puce contient des objets PKCS # 11 Ă part entiĂšre (CKO_PRIVATE_KEY, CKO_PUBLIC_KEY, CKO_CERTIFICATE) qui sont impliquĂ©s dans les opĂ©rations cryptographiques sur le jeton lui-mĂȘme Ă l'aide de l'utilitaire p11conf disponible en tĂ©lĂ©chargement gratuit:$ /usr/local/bin64/p11conf -h
usage: /usr/local/bin64/p11conf [-hitsmIupPred] -A APIpath [-c slotID -U userPin -S SOPin -n newPin -L label]
-h display usage
-i display PKCS
-s display slot(s) info (-c slotID is optional)
-t display token(s) info (-c slotID is optional)
Others must use -c slotID
-m display mechanism list
-I initialize token
-u initialize user PIN
-p set the user PIN
-P set the SO PIN
-r remove all objects
-e enumerate objects
-d dump all object attributes
Copyright(C) 2011-2016
$
Pour voir quels objets sont sur le jeton, il suffit d'exécuter une commande du formulaire:bash-4.3$ /usr/local/bin64/p11conf -A /usr/local/lib64/libls11sw2016.so -c 0 -e
Enter user PIN: ********
Token objects:
1: CKO_PRIVATE_KEY
label: 'LS11SW2016:; ..;0x23855(145493)'
2: CKO_PUBLIC_KEY
label: 'LS11SW2016:; ..;0x23855(145493)'
3: CKO_CERTIFICATE
label: 'LS11SW2016:; ..;0x23855(145493)'
âŠ
OK
bash-4.3$
Si de tels objets sont absents sur le jeton et qu'ils disent que le jeton PKCS # 11 avec la clĂ© non extractible est utilisĂ©, alors ce n'est probablement pas le cas. Le jeton est probablement utilisĂ© simplement comme un lecteur flash avec un code PIN, et le certificat et les clĂ©s sont stockĂ©s en tant qu'objets CKO_DATA .Et enfin, pour voir non seulement quels types d'objets sont stockĂ©s sur le jeton, mais des objets avec tous les attributs, vous devez utiliser l'indicateur âd en plus :bash-4.3$ /usr/local/bin64/p11conf -A /usr/local/lib64/libls11sw2016.so -c 0 âe -d
Enter user PIN: ********
Token objects:
1: CKO_PRIVATE_KEY
label: 'LS11SW2016:; ..;0x23855(145493)'
==================================
Object handle: 0x1
----------------------------------
CKA_CLASS
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
CKA_TOKEN
0x01,
CKA_PRIVATE
0x01,
CKA_LABEL
0x4c, 0x53, 0x31, 0x31, 0x53, 0x57, 0x32, 0x30,
0x31, 0x36, 0x3a, 0xd0, 0x9e, 0xd0, 0x9e, 0xd0,
0x9e, 0x20, 0xd0, 0x9b, 0xd0, 0x98, 0xd0, 0xa1,
0xd0, 0xa1, 0xd0, 0x98, 0x2d, 0xd0, 0xa1, 0xd0,
0xbe, 0xd1, 0x84, 0xd1, 0x82, 0x3b, 0xd0, 0x9c,
0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xbe,
0x20, 0xd0, 0x90, 0x2e, 0xd0, 0x90, 0x2e, 0x3b,
0x30, 0x78, 0x32, 0x33, 0x38, 0x35, 0x35, 0x28,
0x31, 0x34, 0x35, 0x34, 0x39, 0x33, 0x29,
CKA_VALUE: attribute sensitive
CKA_KEY_TYPE
0x03, 0x10, 0x32, 0xd4, 0x00, 0x00, 0x00, 0x00,
CKA_SUBJECT
0x30, 0x81, 0x9b, 0x31, 0x0b, 0x30, 0x09, 0x06,
0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x52, 0x55,
0x31, 0x1a, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04,
0x03, 0x0c, 0x11, 0xd0, 0x9c, 0xd0, 0xb0, 0xd1,
0x81, 0xd0, 0xbb, 0xd0, 0xbe, 0x20, 0xd0, 0x90,
0x2e, 0xd0, 0x90, 0x2e, 0x31, 0x1c, 0x30, 0x1a,
0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x13, 0xd0,
0x9b, 0xd0, 0x98, 0xd0, 0xa1, 0xd0, 0xa1, 0xd0,
0x98, 0x2d, 0xd0, 0xa1, 0xd0, 0xbe, 0xd1, 0x84,
0xd1, 0x82, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x09,
0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09,
0x01, 0x16, 0x10, 0x61, 0x6d, 0x61, 0x73, 0x6c,
0x6f, 0x76, 0x40, 0x6c, 0x69, 0x73, 0x73, 0x69,
0x2e, 0x72, 0x75, 0x31, 0x31, 0x30, 0x2f, 0x06,
0x03, 0x55, 0x04, 0x08, 0x0c, 0x28, 0x35, 0x30,
0x20, 0x20, 0xd0, 0x9c, 0xd0, 0xbe, 0xd1, 0x81,
0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x81,
0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x8f, 0x20, 0xd0,
0xbe, 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1,
0x81, 0xd1, 0x82, 0xd1, 0x8c, 0x20,
CKA_ID
0x97, 0x46, 0x4e, 0xcc, 0x7c, 0xa9, 0xea, 0xb1,
0x0a, 0xda, 0xec, 0x10, 0xf4, 0x49, 0x7e, 0x7f,
0x2d, 0x71, 0x4b, 0xa7,
CKA_SENSITIVE
0x01,
. . .
CKA_GOSTR3410_PARAMS
0x06, 0x09, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x02,
0x01, 0x02, 0x01,
CKA_GOSTR3411_PARAMS
0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01,
0x02, 0x03,
CKA_GOST28147_PARAMS
0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1f,
0x01,
âŠ
OK
bash-4.3$
Tout ce qui est dit ici est valable pour un token / carte Ă puce avec interface PKCS # 11, y compris un token cloud.En conclusion, nous rappelons que les jetons / cartes Ă puce avec interface PKCS # 11 sont largement utilisĂ©s dans les projets Mozilla (navigateurs, clients de messagerie), dans les navigateurs Chrome de Google et d'autres projets. Si nous parlons de la Russie, les jetons / cartes Ă puce avec interface PKCS # 11 sont utilisĂ©s avec succĂšs pour accĂ©der au portail des services d'Ătat.