SFLASH

SFLASH

SFLASH — асимметричный алгоритм цифровой подписи рекомендованный проектом NESSIE European в 2003 году. SFLASH основан на Matsumoto-Imai(MI) схеме, так же называемой C*. Алгоритм принадлежит к семейству многомерных схем с открытым ключом, то есть каждая подпись и каждый хэш сообщения представлен элементами конечного поля K. SFLASH был разработан для очень специфичных приложений, где затраты на классические алгоритмы (RSA, Elliptic Curves, DSA и другие) становятся чрезвычайно высокими: они очень медленные и имеют большой размер подписи. Таким образом SFLASH был создан, чтобы удовлетворять потребностям дешевых смарт-карт.

SFLASH гораздо быстрее и проще, чем RSA, как и в создании, так и в проверке (верификации) подписи.

Содержание

Введение

Во всей статье буду использоваться следующие обозначения:

  1. \| — определяет оператор конкатенации.
  2. [\lambda]_{r \rightarrow  s}  — оператор, который определяется следующим образом: [\lambda]_{r \rightarrow  s}=(\lambda_r, \lambda_{r+1},...,\lambda_{s-1},\lambda_s) , где \lambda =(\lambda_1,...,\lambda_m) , а целые числа r и s должны удовлетворять: 0\leq r\leq s \leq m.

Параметры алгоритма

Алгоритм SFLASH использует два определенных поля:

  1. K=F_{128} определяется как K=F_2[X]/(X^7+X+1). Определим \pi как биекцию между \{0,1\}^7 и K как: \forall b=(b_0,...,b_6)\in \{0,1\}^7, \pi(b)=(b_6X^6+...+b_1X+b_0) \mod X^7+X+1
  2. \Phi=K[X]/(x^{67}+X^5+X^2+X+1). Определим \varphi как биекцию между K^{67} и \Phi как: \forall\omega=(\omega_0,...,\omega_{66})\in K^{67}, \varphi(\omega)=(\omega_{66}X^{66}+...+\omega_1X+\omega_0) \mod X^{67}+X^5+X^2+X+1
  3. \Delta — 80 битная скрытая строка.

Так же алгоритм SFLASH использует две афинные биекции s и t из K^{67} в K^{67}. Каждое из которых составляет скрытые линейные S_L, T_L (матрицы 67*67) и постоянные S_C, T_C(столбец 67*1) соответственно.

Открытые параметры

Открытый ключ заключается в функции G из K^{67} в K^{56} определенную как: G(X)=[t(\varphi^{-1}(F(\varphi(s(X)))))]_{0\rightarrow391}

F — это функция из \Phi в \Phi определенная как \forall A \in \Phi, F(A)=A^{128^{33}+1}

Формирование ключа

Обозначим next_7bit_random_string строку из 7 бит, которая формируется путем вызова CSPRBG(Cryptographically Secure PseudoRandom Bit Generator) 7 раз. Сначала мы получаем первый бит строки, потом второй и так до седьмого.

1)Генерируем S_L
Для генерации инвертированной 67x67 матрицы S_L могут быть использованы два метода:
  • Будем заполнять матрицу по одному элементу до тех пор, пока не заполним всю матрицу:
for i=0 to 66 
    for j=0 to 66 
        S_L[i,j]=pi(next_7bit_random_string)
for i=0 to 66
    for j=0 to 66
    {
        if (i<j) then
                 {U_S[i,j]=pi(next_7bit_random_string); L_S[i,j]=0;};
        if (i>j) then
                 {L_S[i,j]=pi(next_7bit_random_string); U_S[i,j]=0;};
        if (i=j) then
                 {repeat (z=next_7bit_random_string)
                         until z!=(0,0,0,0,0,0,0);
                 U_S[i,j]=pi(z);
                 L_S[i,j]=1;};
    };
2)Генерируем S_C
Используем CSPRBG для нахождения новых 67 элементов K(от верхней к нижней части столбца матрицы). Каждый элемент K находится с помощью функции:

\pi(next_7bit_random_string)

3)Генерируем T_L
Аналогично как и матрицу S_L.
4)Генерируем T_C
Аналогично как и столбец S_C.
5)Генерируем \Delta
С помощью CSPRBG(Cryptographically Secure PseudoRandom Bit Generator) генерируем 80 случайных бит.

Создание подписи

Пусть M — это наше сообщение, для которого мы хотим найти подпись S. Создание подписи S имеет следующий алгоритм:

Схема генерации подписи в алгоритме SFLASH

1) Пусть M_0, M_1, M_2, M_3 — это строки определяющиеся с помощью алгоритма криптографического хеширования SHA-1:

~ M_0=SHA-1(M),
M_1=SHA-1(M_0\|0x00),
M_2=SHA-1(M_0\|0x01),
M_3=SHA-1(M_0\|0x02),


2) Найдем V — 392 битную строку как:

 V=[M_1]_{0\rightarrow159}\|[M_2]_{0\rightarrow159}\|[M_3]_{0\rightarrow71}

3) Найдем W — 77 битную строку как:

W=[SHA-1(V\|\Delta)]_{0\rightarrow76}

4) Найдем Y — строку из 56 элементов K как:

Y=(\pi([V]_{0\rightarrow6}),\pi([V]_{7\rightarrow13}),...,\pi([V]_{385\rightarrow391}))

5) Найдем R — строку из 11 элементов K как:

R=(\pi([W]_{0\rightarrow6}),\pi([W]_{7\rightarrow13}),...,\pi([W]_{70\rightarrow76}))

6) Найдем B — элемент \Phi как:

B=\varphi(t^{-1}(Y\|R))

7) Найдем A — элемент \Phi как:

A=F^{-1}(B), где F — функция из \Phi в \Phi определенная как: \forall A\in\Phi, F(A)=A^{128^{33}+1}

8) Найдем X=(X_0,...,X_{66}) — строка 67 элементов K:

X=(X_0,...,X_{66})=s^{-1}(\varphi^{-1}(A))

9) Подпись S — 469 битная строка полученная как:

S=\pi^{-1}(X_0)\|...\|\pi^{-1}(X_{66})

Проверка (верификация) подписи

Даны сообщение M (строка бит) и подпись S (256-битовая строка). Следующий алгоритм используется для определения валидности подписи S сообщения M:

Схема проверки(верификации) подписи в алгоритме SFLASH

1) Пусть M_0, M_1, M_2, M_3 — это строки определяющиеся с помощью алгоритма криптографического хеширования SHA-1:

~ M_0=SHA-1(M),
M_1=SHA-1(M_0\|0x00),
M_2=SHA-1(M_0\|0x01),
M_3=SHA-1(M_0\|0x02),


2) Найдем V — 392 битную строку как:

 V=[M_1]_{0\rightarrow159}\|[M_2]_{0\rightarrow159}\|[M_3]_{0\rightarrow71}

3) Найдем Y — строку из 56 элементов K как:

Y=(\pi([V]_{0\rightarrow6}),\pi([V]_{7\rightarrow13}),...,\pi([V]_{385\rightarrow391}))

4) Найдем Y' — строку из 56 элементов K как:

Y'=G(\pi([S]_{0\rightarrow6}),\pi([S]_{7\rightarrow13}),...,\pi([S]_{385\rightarrow391}))

5) Сравниваем получившиеся строки Y и Y'. Если они равны, то подпись принимается, в противном случае — отклоняется.

Литература

Ссылки




Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "SFLASH" в других словарях:

  • Sflash — ist ein asymmetrisches Kryptosystem für digitale Signaturen. Es wurde von Nicolas T. Courtois, Louis Goubin und Jacques Patarin entwickelt.[1] Sflash wurde durch das NESSIE Projekt 2003 empfohlen.[2] 2007 wurde von Vivien Dubois, Pierre Alain… …   Deutsch Wikipedia

  • Multivariate Cryptography — is the generic term for asymmetric cryptographic primitives based on multivariate polynomials over finite fields. In certain cases those polynomials could be defined over both a ground and an extension field. If the polynomials have the degree… …   Wikipedia

  • Multivariate cryptography — is the generic term for asymmetric cryptographic primitives based on multivariate polynomials over finite fields. In certain cases those polynomials could be defined over both a ground and an extension field. If the polynomials have the degree… …   Wikipedia

  • NESSIE — For other uses, see Nessie (disambiguation). NESSIE (New European Schemes for Signatures, Integrity and Encryption) was a European research project funded from 2000–2003 to identify secure cryptographic primitives. The project was comparable to… …   Wikipedia

  • Jacques Stern (Kryptologe) — Jacques Stern (* 21. August 1949 in Paris) ist ein französischer Kryptologe, Informatiker und Mathematiker. Jacques Stern Inhaltsverzeichnis 1 …   Deutsch Wikipedia

  • Topics in cryptography — This article is intended to be an analytic glossary , or alternatively, an organized collection of annotated pointers.Classical ciphers*Autokey cipher *Permutation cipher*Polyalphabetic substitution **Vigenère cipher*Polygraphic substitution… …   Wikipedia

  • Jacques Stern — (born 1949) is a cryptographer, currently a professor at the École Normale Supérieure, where he is Director of the Computer Science Laboratory. He received the 2006 CNRS Gold Medal. His notable work includes the cryptanalysis of numerous… …   Wikipedia

  • NESSIE — Projet NESSIE Le projet NESSIE (pour « New European Schemes for Signatures, Integrity and Encryption ») fut mené entre janvier 2000 et mars 2003 par la commission européenne via son programme IST (pour « Information Society… …   Wikipédia en Français

  • Projet NESSIE — Le projet NESSIE (pour « New European Schemes for Signatures, Integrity and Encryption ») fut mené entre janvier 2000 et mars 2003 par la commission européenne via son programme IST (pour « Information Society Technologies»), dans… …   Wikipédia en Français

  • Projet Nessie — Le projet NESSIE (pour « New European Schemes for Signatures, Integrity and Encryption ») fut mené entre janvier 2000 et mars 2003 par la commission européenne via son programme IST (pour « Information Society Technologies»), dans… …   Wikipédia en Français


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»