Glasnost

La hiérachie des fichiers Cryptoflex™ pour le fournisseur CryptoAPI™ de Microsoft™ Schlumberger™

Nous omettons ici le fichier dédié racine 3F00.

Il ne s'agit ici que de déductions basées sur des expériences empiriques, avec tous les champrs d'erreur que la méthodologie a pu apporter.

Fichiers standards cryptoflex

0011:
Clés AUT
0002:
Numéro de série.
0000:
CHV

Schlumberger

3F11:
Dossier applicatif

3F110020:

Sorte de fichier d'information contenant deux fois (pourquoi ?) le label de la carte. Description par octet:

0-4₁₀:
Les 5 premiers octets contiennent "1F50D30201".
5₁₀:
Définis les utilisations possible de la carte:
01: PKCS#11, 02: Crypto API, 03: Cyrpto API + PKCS #11.
8₁₀:
Définis la longueur de la seconde chaine de label (limité à 32 octets) se trouvant à la fin et n'étant apparement pas utilisée. Donc la valeur est 32₁₀ ou plutôt 21₁₆.
26 et 27₁₀ (1A et 1B₁₆):
Deux octets à 1, mais quand on les mets à 0, cela n'a pas apparement d'influence. Il semblerait aussi que ces deux octets changent de place en fonction de la longueur des clés.
43₁₀ (2B₁₆):
Premier octet de la chaine de label de la carte (chaine faisant 32 octets, si elle en contient moins, on complète par des zéros).
73₁₀ (49₁₆):
Dernier octet de la chaine de label de la carte.
119₁₀ (77₁₆):
Premier octet de la chaine dupliquée de label de la carte. Cette chaine de 32 octets n'est pas mise à jour par l'utilitaire standard de gestion de carte.
151₁₀ (97₁₆):
Dernier octet du fichier, et par extension de la chaine dupliquée.
3F110030:
Fichier élémentaire transparent de données publiques. Vide, (si de taille identique), ce fichier est le même que le fichier de données privées.
3F110031:
Fichier élémentaire transparent de données privées. Vide, (si de taille identique), ce fichier est le même que le fichier de données publiques.
3F113F02:
Répertoire d'une paires de clés 1024 bits.
3F113F03:
Répertoire d'une paires de clés 2048 bits.

Les fichiers de données

Entête

Série de trois mots par enregistrement.

L'enregistrement 0 est particulier: Premier mot: Inconnu. Second mot: Déplacement amenant au premier octet du premier enregistrement correspondant à la place restante. Troisième mot: Longueur de la place utilisée.

L'octet de poid fort (position δ) du second mot marque le départ (zéro) de tous les déplacements contenus dans les enregistrements des entêtes. Pour obtenir le déplacement absolue il faut donc rajouter δ.

Apparement, dans tous les cas, δ == C₁₆.

Premier mot: Inconnu. Apparement le type de données. Second mot: Déplacement relatif à δ amenant au premier octet de l'enregistrement correspondant. Troisième mot: Longueur des données de l'enregistrement.

Enregistrement

Les fichiers sont une suite d'enregistrements précédés par le mot en little-endian précisant le déplacement amenant au mot en little-endian suivant l'enregistrement. Ce mot correspond au déplacement amenant au mot en little-endian le prochain enregistrement. Donc entre deux déplacements, se trouve un enregistrement.

Un enregistrement est composé d'un octet "pivot" qui pourrait éventuellement avoir une autre fonction. Après cet octet, il y a les données de l'enregistrement, avant il y a un mot chiffrant le déplacement nécessaire pour atteindre le prochain enregistrement en partant du pivot. Donc, si l'on enlève à ce déplacement la longueur du mot suivant de déplacement (2 octets) et le pivot (1 octet), on obtient la longueur des données contenues dans l'enregistrement.

Notes diverses

Pas faussement vrai, mais pas vraiment faux non plus

Toutes les positions de l'entête sont relatives à l'octet 10₁₀ (A₁₆), l'octet 10₁₀ est le onzième octet (la numérotation commençant à zéro). L'octet 11₁₀ est donc l'octet zéro des positions de l'entête. Il faut donc ajouter 11 à toutes les adresses figurant dans l'entête.

L'entête est composée d'enregistrement de mots longs (4 octets), suivi de l'adresse du mot précédent la donnée. La lecture se fait de droite à gauche.

Premier mot: inconnu Second mot: Longueur de l'enregistrement. Troisième mot: position de l'enregistrement. Donc second mot+ troisième mot+ 11 => adresse absolue de l'octet final de l'enregistrement.

Mot 12;11₁₀ (C;B₁₆):
Le mot positionnant la fin de l'entête des données. Appelons cette valeur δ.
Mot 14;13₁₀ (E;D₁₆):
La taille réservée aux données du fichier.
Mot 12₁₀+δ-1;12₁₀+δ-2 (C₁₆+δ-2;C₁₆+δ-2):
Déplacement permettant d'atteindre la valeur du prochain déplacement, le prochain déplacement amene juste après le premier enregistrement.

La fin des enregistrements est fixée par un déplacement de 0.