SFLASH

SFLASH  este un algoritm de semnătură digitală asimetrică recomandat de proiectul european NESSIE în 2003. SFLASH se bazează pe schema Matsumoto-Imai( MI ), numită și C* . Algoritmul aparține unei familii de scheme de chei publice multidimensionale, adică fiecare semnătură și fiecare hash de mesaj este reprezentată de elemente ale câmpului final K. SFLASH a fost conceput pentru aplicații foarte specifice în care costurile algoritmilor clasici ( RSA , Curbe Eliptice , DSA și altele) devin extrem de înalte.: sunt foarte lente și au o dimensiune mare a semnăturii. Așadar, SFLASH a fost creat pentru a răspunde nevoilor de carduri inteligente ieftine.

SFLASH este mult mai rapid și mai ușor decât RSA, atât la crearea, cât și la verificarea (verificarea) unei semnături.

Introducere

Următoarea notație va fi folosită pe parcursul acestui articol:

  1.  — definește operatorul de concatenare .
  2.  este un operator definit astfel: , unde , și numerele întregi r și s trebuie să satisfacă: .

Parametrii algoritmului

Algoritmul SFLASH utilizează două câmpuri definite:

  1. definit ca . Definiți ca o bijecție între și K ca:
  2. . Definiți ca o bijecție între și ca:
  3.  — șir ascuns de 80 de biți.

Algoritmul SFLASH utilizează, de asemenea, două bijecții afine s și t de la la . Fiecare dintre acestea este ascunsă liniară (matricea 67*67) și, respectiv, constantă (coloana 67*1).

Deschide Opțiuni

Cheia publică se află în funcția G de la până la definită ca:

F este o funcție de la până la definită ca

Generare cheie

Fie next_7bit_random_string un șir de 7 biți, care este generat prin apelarea CSPRBG (Cryptographically Secure PseudoRandom Bit Generator) de 7 ori. Mai întâi obținem primul bit de sfoară, apoi al doilea și așa mai departe până la al șaptelea.

1) Noi generăm Două metode pot fi utilizate pentru a genera o matrice inversată 67x67 : pentru i=0 până la 66 pentru j=0 până la 66 S_L[i,j]=pi(next_7bit_random_string) pentru i=0 până la 66 pentru j=0 până la 66 { dacă (i<j) atunci {U_S[i,j]=pi(next_7bit_random_string); L_S[i,j]=0;}; dacă (i>j) atunci {L_S[i,j]=pi(next_7bit_random_string); U_S[i,j]=0;}; dacă (i=j) atunci {repeat (z=next_7bit_random_string) până la z!=(0,0,0,0,0,0,0); U_S[i,j]=pi(z); L_S[i,j]=1;}; }; 2) Noi generăm Utilizați CSPRBG pentru a găsi noile 67 de elemente ale lui K (din partea de sus până în jos a coloanei matricei). Fiecare element al lui K se găsește folosind funcția:

(next_7bit_random_string)

3) Noi generăm La fel ca și matricea . 4) Noi generăm La fel ca și coloana . 5) Noi generăm Folosind CSPRBG (Cryptographically Secure PseudoRandom Bit Generator) generăm 80 de biți aleatori.

Crearea unei semnături

Fie M mesajul nostru pentru care dorim să găsim o semnătură S. Crearea unei semnături S are următorul algoritm:

1) Fie  - acestea sunt șiruri determinate folosind algoritmul de hashing criptografic SHA-1 :

, , , ,

2) Găsiți șir V - 392 de biți ca:

3) Găsiți W - șir de 77 de biți ca:

4) Găsiți Y - un șir de 56 K elemente ca:

5) Găsiți R - un șir de 11 K elemente ca:

6) Găsiți B - element ca:

7) Găsiți A - element ca:

, unde F este o funcție de la până la definită ca:

8) Găsiți  - linia 67 elemente K:

9) Semnătura S - șir de 469 de biți obținut ca:

Verificarea (verificarea) semnăturii

Dat un mesaj M (șir de biți) și o semnătură S (șir de 256 de biți). Următorul algoritm este utilizat pentru a determina validitatea semnăturii S a mesajului M:

1) Fie  - acestea sunt șiruri determinate folosind algoritmul de hashing criptografic SHA-1 :

, , , ,

2) Găsiți șir V - 392 de biți ca:

3) Găsiți Y - un șir de 56 K elemente ca:

4) Găsiți Y' - un șir de 56 K elemente ca:

5) Comparați șirurile rezultate Y și Y'. Dacă sunt egale, atunci semnătura este acceptată, în caz contrar este respinsă.

Literatură

Link -uri