ECCTK (Elliptic Curve Cryptographic ToolKit): ECCTK (Elliptic Curve Cryptographic ToolKit)

# ECCTK (Elliptic Curve Cryptographic ToolKit)

### 1.1.0

## Introduction

ECCTK est un toolkit de cryptographie implémenté en en C/C++, il peut donc facilement être incorporé dans tout programme C/C++.

ECCTK peut-être complété du produit ECCTK-JNI qui permet d'interfacer le produit ECCTK avec des applications JAVA via l'interface JNI (Java Native Interface). Merci de me contacter pour connaître les possibilités et conditions du produit ECCTK-JNI.

L'implémentation des différents algorithmes est basée sur différentes normes et standards. Les algorithmes basés sur les courbes elliptiques sont notamment basés sur le dernier Draft du "Standard Specifications for Public Key Cryptography" (IEEE P1363), et les différents ajouts fait à ce dernier depuis sa standardisation en 2000, à savoir les drafts "Standard Specifications for Public Key Cryptography: Additional Techniques" (IEEE P1363a).

### Remarques :

- trois générateurs de nombre pseudo-aléatoire sont disponible dans ECCTK :
  - le générateur Mersenne Twister (Makoto Matsumoto et Takuji Nishimura)
  - un générateur basé sur le standard FIPS PUB 186-2
  - un générateur basé sur le standard ANSI X9.17
- La compression/décompression s'effectue en utilisant le mode gzip de la librairie Zlib (Jean-loup Gailly et Mark Adler)
- L'implémentation des algorithmes MARS, SERPENT & TWOFISH est basée sur l'implémentation réalisée par le Docteur Brian R. Gladman dans le cadre de l'évaluation de ces algorithmes pour le "programme" AES Advanced Encryption Standard.

## Algorithmes disponibles

Voici la liste des algorithmes supportés par le produit ECCTK.

### Algorithmes de HASH, HMAC et MAC :

#### Algorithmes de HASH :

- MD5 : Ronald L. Rivest, RFC 1321
- SHA-1 : FIPS PUB 180-1
- SHA-256 : FIPS PUB 180-2
- SHA-384 : FIPS PUB 180-2
- SHA-512 : FIPS PUB 180-2
- RIPEMD : Hans Dobbertin, Antoon Bosselaers et Bart Preneel

`Taille des empreintes` :

- MD5 : 128 bits
- SHA-1 : 160 bits
- SHA-256 : 256 bits
- SHA-384 : 384 bits
- SHA-512 : 512 bits
- RIPEMD : 128, 160, 256 et 320 bits

#### Algorithmes de HMAC :

- HMAC-MD5 : RFC 2104 et 2202
- HMAC-SHA1 : RFC 2104 et 2202
- HMAC-RIPEMD : RFC 2104 et 2286

`Taille des empreintes` :

- HMAC-MD5 : 128 bits
- HMAC-SHA1 : 160, 256, 384 et 512 bits
- HMAC-RIPEMD : 128, 160, 256 et 320 bits

`Remarques` :

- Les modes 256, 384 et 512 bits de l'algorithme HMAC-SHA1 ne sont pas standardisé actuellement
- Les modes 256 et 320 bits de l'algorithme HMAC-RIPEMD ne sont pas standardisé actuellement
- La taille de la clef est non définie
- Il est recommandé d'utiliser une taille de clef au minimum égale à la taille de l'empreinte
- Lorsque la clef possède une taille supérieure à la la taille de l'empreinte, elle est réduite à cette taille par application de la fonction de hash associée (technique normalisée)

#### Algorithmes de MAC :

- MAC-RIPEMD : Bart Preneel et Paul van Oorschot

`Taille des empreintes` :

- MAC-RIPEMD : 128 et 160 bits

`Remarques` :

- La taille de la clef doit être au maximum égale à la taille de l'empreinte.
- Il est recommandé d'utiliser une taille de clef égale à la taille de l'empreinte.

### Algorithmes symétriques :

Les algorithmes symétriques sont essentiellement des algorithmes de chiffrement. Ils sont utilisés pour la protection de données volumineuses dans la mesure où ils apportent le meilleur rapport sécurité/rapidité. Nous allons distinguer dans cette section les algorithmes utilisant des tailles de blocs de 64 bits et ceux utilisant des tailles de blocs de 128 bits. Ces derniers sont le plus souvent le résultat de soumission au "programme" AES Advanced Encryption Standard. Nous allons également indiqué les différents modes opératoires disponibles pour tous ces algorithmes.

#### Algorithmes utilisant des tailles de blocs de 64 bits :

- DES : Data Encryption Standard FIPS PUB 46-3
- 3DES-EDE-2 : Triple DES à deux clefs, on chiffre avec la 1ère clef puis on déchiffre avec la 2nde clef et on chiffre à nouveau avec la 1ère clef FIPS PUB 46-3
- 3DES-EDE-3 : Triple DES à trois clefs, on chiffre avec la 1ère clef puis on déchiffre avec la 2nde clef et on chiffre à nouveau avec 3éme clef FIPS PUB 46-3
- RC2 : Ronald L. Rivest RFC 2268
- RC4 : Ronald L. Rivest
- CAST-128 : Carlisle Adams & Stafford Tavares RFC 2144
- BLOWFISH : Bruce Schneier

#### Algorithmes utilisant des tailles de blocs de 128 bits :

- MARS : IBM
- SERPENT : Ross Anderson, Eli Biham & Lars Knudsen
- TWOFISH : Bruce Schneier
- RIJNDAEL : Joan Daemen & Vincent Rijmen (vainqueur du programme AES) FIPS PUB 197

#### Taille des clefs :

Sont indiqué ici les tailles de clefs supportés par le produit, ce qui ne correspond pas nécessairement avec les tailles de clefs pouvant être mise en oeuvre par les algorithmes.

- DES : de 64 bits (56 bits + 8 bits de parité)
- 3DES-EDE-2 : 128 bits (112 bits + 16 bits de parité)
- 3DES-EDE-2 : 192 bits (168 bits + 24 bits de parité)
- RC2 : supporte des clefs de 8 bits à 1024 bits par pallier de 8 bits
- RC4 : supporte des clefs de 8 bits à 2048 bits par pallier de 8 bits
- CAST-128 : supporte des clefs de 8 bits à 128 bits par pallier de 8 bits
- BLOWFISH : supporte des clefs de 8 bits à 448 bits par pallier de 8 bits
- MARS, SERPENT, TWOFISH, RIJNDAEL : supporte des clefs de 8 bits à 256 bits par pallier de 8 bits (les tailles standards étant 128, 192 et 256 bits).

`Remarques` :

- Pour le CAST-128, il est plus que recommandé d'utiliser une clef de plus de 40 bits
- Si une clef possède une taille supérieure à celle requis par un algorithme, les bits en surplus sont ignorés
- Si une clef possède une taille inférieure à celle requis par un algorithme, elle est complétée avec des 0

#### Modes de chiffrement :

Les différents modes de chiffrement supportés par le produit sont les suivants :

- ECB : Electronic Code Book :
  - Blocs indépendans les uns des autres
  - Padding du dernier bloc

- CBC : Cipher Block Chaining :
  - Blocs chaînés les uns aux autres
  - Utilisation d'un vecteur d'initialisation IV
  - Padding du dernier bloc

- CFB : Cipher FeedBack :
  - Mode CFB à 8 bits
  - Utilisation d'un vecteur d'initialisation IV
  - Permet de chiffrer un ou plusieurs octets indépendemment des autres dans un bloc donné
  - Pas de padding

- OFB : Output FeedBack :
  - Mode OFB à 8 bits
  - Utilisation d'un vecteur d'initialisation IV
  - Permet de chiffrer un ou plusieurs octets indépendemment des autres dans un bloc donné
  - Pas de padding

- CTR : Counter :
  - Utilisation d'un compteur (équivalent au vecteur d'initialisation) Counter
  - Permet de chiffrer un ou plusieurs octets indépendemment des autres dans un bloc donné
  - Pas de padding

### Algorithmes asymétriques :

Nous allons distinguer les algorithmes en fonction de leur usage. Il existe plusieurs grandes classes d'utilisation des algorithmes asymétriques : chiffrement, signature, échange de clef

#### Algorithmes de chiffrement :

ECCTK comprend deux algorithmes de chiffrement. Dans le cas des algorithmes asymétriques, le chiffrement est essentiellement utilisé (dans les applications) pour faire transiter des clefs de sessions (utilisées avec les algorithmes symétriques).

- ECIES : Elliptic Curve Integrated Encryption Scheme, est basé sur les travaux de Abdalla, Bellare & Rogaway.
- PSEC3 : Provably Secure Elliptic Curve Encryption Scheme version 3 : Tatsuaki Okamoto & David Pointcheval

#### Algorithmes de signature :

ECCTK comprend deux algorithmes de signature. Ces algorithmes permettent à toute personne possédant la clef publique d'un tiers, de vérifier que ce dernier a signé ou non une donnée.

- ECNR : Elliptic Curve Nyberg-Rueppel Signature Scheme, est basé sur les travaux de Miller, Koblitz, Nyberg & Rueppel.
- ECDSA : Elliptic Curve Digital Signature Algorithm, est basé sur les travaux de Miller, Koblitz & Kravitz.

#### Algorithmes d'échanges de clef :

ECCTK comprend deux algorithmes d'échange de clef. Ces algorithmes offre la possibilité à deux entités de dériver une même clef de session. Pour réaliser cette dérivation, les clefs privées & publiques des deux entités sont mises en oeuvre.

- ECDH-KA : Elliptic Curve Diffie-Hellman Key Agreement, est basé sur les travaux de Diffie, Hellman, Miller & Koblitz.
- ECMQV-KA : Elliptic Curve Menezes-Qu-Vanstone Key Agreement, est basé sur les travaux de Law, Menezes, Qu, Solinas & Vanstone.

### Autres algorithmes :

#### Algorithmes de génération de pseudo-aléa :

ECCTK comprend trois générateur de valeur peudo-aléatoire. Le premier d'entre eux (MT-PRNG) ne doit pas être utilisé pour la génération de "secret" cryptographique (clef de session par exemple). Les deux autres sont basés sur des standards cryptographiques et peuvent être utilisés pour la génération de clefs.

- MT-PRNG : Mersenne Twister Pseudo Random Number Generator : Makoto Matsumoto and Takuji Nishimura.
- FIPS PUB 186-2 : Algorithme basé sur le standard FIPS PUB 186-2, recommandé pour la génération de clef cryptographique
- ANSI X9.17 : Algorithme basé sur le standard ANSI X9.17, recommandé pour la génération de clef cryptographique

`Remarques` :

- le générateur Mersenne Twister est très rapide et peut-être utilisé pour généré des valeurs non cryptographiques.
- le générateur ANSI X9.17 est plus performant que le générateur FIPS PUB 186-2.
- le générateur ANSI X9.17 disponible dans ECCTK utilise l'AES au lieu du DES.
- le générateur ANSI X9.17 est utilisé par ECCTK "en interne" lorsque la génération de nombre pseudo-aléatoire est nécessaire

#### Algorithmes de partage de secret :

ECCTK propose un algorithme de partage de secret. Le principe de cet algorithme est de permettre de "diviser" un secret en plusieurs éléments (nombres variables). Pour reconstruire le secret original, un nombre donné (mais variable) d'éléments est nécessaire. Ainsi, il est possible de partager un secret entre X personnes et d'obliger la présence de Y (Y <= X) personnes pour reconstruire le secret. L'algorithme disponible est celui de Shamir.

## Système d'Exploitation & Composition du Produit

Le produit (ECCTK) est disponible pour Windows, Linux et FreeBSD. Il est toutefois possible d'obtenir, à la demande et sous certaines conditions, des versions pour d'autres système d'exploitation : Sun Solaris, MAC OS X, ...

Merci de me contacter pour connaître les possibilités et conditions pour une version destinée à un OS particulier.

En fonction du système d'exploitation, le produit ce compose de divers éléments :

- Windows :
  - les trois librairies dynamiques : libecctk-cipher.dll, libecctk-hash.dll, libecctk-ecc.dll
  - les trois librairies d'importations (pour Visual C++ ou .NET) : libecctk-cipher.lib, libecctk-hash.lib, libecctk-ecc.lib
  - les quatres fichiers d'entête : ecctk-prototype.h, ecctk-cipher.h, ecctk-hash.h, ecctk-ecc.h

- Linux & FreeBSD :
  - les trois librairies dynamiques : libecctk-cipher.so, libecctk-hash.so, libecctk-ecc.so
  - les quatres fichiers d'entête : ecctk-prototype.h, ecctk-cipher.h, ecctk-hash.h, ecctk-ecc.h

### Remarques :

- Les librairies ecctk-cipher & ecctk-hash sont indépendantes
- La librairie ecctk-ecc dépend des deux premières
- Chaque librairie possède un numéro de série unique pour un Client (et éventuellement un produit) donné. Ce numéro de série fait également office de licence.
- La compression/décompression de données n'est accessible qu'optionnellement avec les algorithmes de chiffrement asymétriques

## Installation

### Remarques :

- Le produit s'addressant plus particulièrement à des développeurs, il est supposé que la personne procédant à l'installation possède une bonne connaissance des outils de développement et des concepts de configuration de projet.

Le package du produit est structuré en répertoire de la manière suivante :

- répertoire ecctk : la racine
  - répertoire include : fichiers d'entête pour le développement d'applications en C/C++
  - répertoire lib (Windows uniquement) : librairies d'importation des fonctions du produit
  - répertoire dll : librairies dynamiques du produit
  - répertoire doc :
    - html : documentation au format html
    - pdf : documentation sous la forme d'un fichier PDF
  - répertoire example :
    - répertoire console : programme en ligne de commande permettant d'utiliser toutes les fonctions disponibles
    - répertoire code : exemples d'utilisation en C/C++

Installation :

- Windows :
  - Copier le répertoire ecctk sur votre disque dur (l'emplacement n'a pas d'importance).
  - Renseigner les différentes informations concernant l'emplacement des headers, libs, dlls dans vos projets de développement.
- Linux & FreeBSD :
  - Copier le répertoire ecctk dans /usr/local/
  - Renseigner les différentes informations concernant l'emplacement des headers & dlls dans vos Makefile :
    - -I/usr/loca/ecctk/include/ pour les headers C/C++
    - -L/usr/loca/ecctk/dlls pour les librairies dynamiques
  - Copier les dlls dans le répertoire /usr/local/lib pour permettre l'éxécution de vos programmes

## ECCTK Licence

Copyright © 2002-2005 par Ludovic FLAMENT (ludovic.flament@free.fr).

CONDITIONS DE CONCESSION PAR M. Ludovic FLAMENT DU DROIT D'UTILISATION DU PRODUIT ECCTK(Elliptic Curve Cryptographic ToolKit)

VEUILLEZ LIRE ATTENTIVEMENT LE PRESENT CONTRAT DE LICENCE ("CONTRAT"). EN CONTINUANT L'UTILISATION DU PRODUIT, VOUS VOUS ENGAGEZ A RESPECTER SANS RESERVE LES TERMES ET CONDITIONS DU PRESENT CONTRAT.SI VOUS ETES EN DESACCORD AVEC LES CLAUSES ET CONDITIONS, VEUILLEZ NE PAS POURSUIVRE L'UTILISATION ET DETRUIRE LE PRODUIT AINSI QUE TOUTES LES COPIES EN VOTRE POSSESSION.

### OCTROI DE LICENCE

M. Ludovic FLAMENT concède le droit d'utiliser en France et au sein des pays de l'union européenne, de manière non exclusive et non transférable ce PRODUIT ("PRODUIT"), et sa DOCUMENTATION ("DOCUMENTATION") sur un nombre d'ordinateurs correspondant au nombre de licences d'utilisation acquises. Le Client s'engage à l'y conserver en mémoire et à l'exploiter conformément à l'usage prévu dans la DOCUMENTATION associée. Le Client pourra reproduire le PRODUIT en UN exemplaire, appelé "copie de sauvegarde" ayant pour but de régénérer le PRODUIT original en cas de détérioration accidentelle. En aucun cas, cette reproduction ne pourra être utilisée à d'autres fins. Attention votre responsabilité pourrait être engagée en cas de reproduction multiple ou d'utilisation du PRODUIT par un tiers. Le Client s'engage à ne jamais, désassembler, décompiler, traduire, ou modifier par quelque procédé que ce soit, tout ou partie du PRODUIT.

### REDISTRIBUTION

M. Ludovic FLAMENT concède au Client le droit de redistribuer les librairies dynamiques contenues dans le PRODUIT et uniquement ces dernières avec les produits conçus et réalisés par le Client sur la base du PRODUIT. Le client ne pourra redistribuer que les librairies dynamiques pour lesquelles il aura une licence valide. Cette dernière pouvant être associée à un produit précis développé par le Client, ce dernier s'engage à ne pas redistribuer les librairies dynamiques avec un autre produit qu'il aurait développé. Le Client s'engage à ne pas vendre ou concéder tout ou partie du PRODUIT ou de sa DOCUMENTATION sans autorisation écrite préalable de M. Ludovic FLAMENT.

### DROIT D'AUTEUR

Le PRODUIT, exemplaire fourni ou dupliqué, est et demeure exclusivement la propriété de M. Ludovic FLAMENT. Tous les droits de propriété intellectuelle, copyright, marque déposée et secret, applicables au PRODUIT sont et restent acquis à M. Ludovic FLAMENT conformément à la législation sur les droits d'auteur.

Le Client ne peut vendre, transférer, publier, céder, communiquer ou mettre à disposition d'une façon quelconque un PRODUIT ou ses copies à des tiers, sans autorisation écrite de M. Ludovic FLAMENT. Cette clause s'applique également en cas de cession par le client du matériel sur lequel le PRODUIT est installé, quelles qu'en soient les conditions, cette cession entraîne de facto la résiliation de la licence. Le Client s'oblige à assurer la protection de chaque PRODUIT et des copies d'une façon adéquate au maintien des droits de l'auteur. Il prendra toutes mesures appropriées pour remplir cette obligation et la faire remplir par les personnes pouvant avoir accès au PRODUIT ou à ses copies.

### LIMITES DE GARANTIE

M. Ludovic FLAMENT garantit, sous réserve d'une exploitation dans les conditions normales d'utilisation, que le PRODUIT fonctionne conformément aux indications spécifiées dans la DOCUMENTATION accompagnant le PRODUIT. La garantie du PRODUIT fourni par M. Ludovic FLAMENT prend effet au jour de l'acquisition du PRODUIT et pendant une période de 90 (quatre vingt dix) jours à compter de cette date. M. Ludovic FLAMENT ne garantit pas que le PRODUIT est exempt de vice de forme. M. Ludovic FLAMENT n'accorde aucune garantie, expresse ou tacite, en cas de dommage relatif au PRODUIT et notamment inadéquation à la commercialisation ou à un usage particulier ou atteinte aux droits des tiers. En aucune circonstance, M. Ludovic FLAMENT, ses fournisseurs ou revendeurs, ne pourront être tenus pour responsable de quelque dommage, direct ou indirect, causé à vous ou à un tiers, notamment, à titre purement indicatif et non limitatif, un mal fonctionnement ou une défaillance informatique, des manques à gagner, dépenses, pertes de données, pertes de logiciels, détériorations ou pertes de matériel supportés par vous-même ou par un tiers, y compris les frais de récupération, reproduction, ou de réparation de telles pertes ou détériorations.

Si le PRODUIT ne fonctionne pas conformément aux indications spécifiées dans la DOCUMENTATION et sous réserve d'une exploitation dans les conditions normales d'utilisation, la seule obligation de M. Ludovic FLAMENT est son assistance pour vous aider à résoudre le problème. Tout PRODUIT de remplacement sera garanti pour le reste de la période de garantie initiale.

### REGLEMENTATION CRYPTOGRAPHIQUE

Le PRODUIT met en œuvre des moyens de cryptologie basés sur des algorithmes standards. LE PRODUIT est conforme à la réglementation française et européenne en matière de cryptologie.

Pour tenir compte de la législation française en matière d'exportation de moyens de cryptographie, ainsi que des réglementations en vigueur hors des frontières françaises, Le Client s'engage à se tenir informé et à respecter toute réglementation applicable à l'importation, à l'exportation et à l'utilisation de moyens cryptographiques.