Войти  |  Регистрация
Авторизация

ACE Encrypt



ACE (Advanced Cryptographic Engine) — набор программных средств, реализующих шифрование в режиме схемы шифрования с открытым ключом, а также в режиме цифровой подписи. Соответствующие названия этих режимов — «ACE Encrypt» и «ACE Sign». Схемы являются вариантами реализации схем Крамера-Шоупа. Внесённые изменения нацелены на достижение наилучшего баланса между производительностью и безопасностью всей системы шифрования.

Авторы

Все алгоритмы, написанные в ACE, основаны на алгоритмах, разработанных Виктором Шоупом(Victor Shoup) и Рональдом Крамером (Ronald Cramer). Полная спецификация алгоритмов написана Виктором Шоупом. Реализация алгоритмов выполнена Томасом Швейнбергером(Thomas Schweinberger) и Медди Нассей (Mehdi Nassehi), их поддержкой и развитием занимается Виктор Шоуп. Томас Швейнберг принимал участие в составлении документа спецификаций ACE, а также написал руководство пользователя.
Рональд Крамер в настоящее время находится в университете Орхуса, Дания. Он принимал участие в работе, относящейся к ACE Encrypt пока находился в ETH в Цюрихе, Швейцария.
Медди Нассей и Томасом Швейнбергер работали над проектом ACE в исследовательской лаборатории IBM в Цюрихе, Швейцария, но в настоящее время закончили своё пребывание там.
Виктор Шоуп работает в исследовательской лаборатории IBM в Цюрихе, Швейцария.

Безопасность

Доказательство безопасности схемы шифрования и схемы цифровой подписи в ACE проводится с использованием обоснованных и естественных допущений. Четырьмя основными допущениями являются:

  • Допущение Диффи-Хеллмана
  • Сильное допущение RSA
  • Стойкость к коллизиям на второй прообраз в SHA-1
  • Псевдо-случайность режима сумматора/счётчика MARS

Основные обозначения и терминология

Приведём определения некоторых обозначений и терминов, используемых в данной статье.

Основные математические обозначения

Z {displaystyle Z} — множество целых чисел.
F 2 [ T ] {displaystyle F_{2}[T]} — множество одномерных полиномов с коэффициентами в конечном поле F 2 {displaystyle F_{2}} с числом элементов поля — 2.
A r e m n {displaystyle Aremn} — такое целое число r ∈ { 0 , . . . , n − 1 } {displaystyle rin left{0,...,n-1 ight}} , для которого A ≡ r ( m o d n ) {displaystyle Aequiv r(modn)} при целом n > 0 {displaystyle n>0} и A ∈ Z {displaystyle Ain Z} .
A r e m f {displaystyle Aremf} — такой полином r ∈ F 2 [ T ] {displaystyle rin F_{2}[T]} с d e g ( r ) < d e g ( f ) {displaystyle deg(r)<deg(f)} , такой что A ≡ r ( m o d f ) {displaystyle Aequiv r(modf)} при A , f ∈ F 2 [ T ] , f ≠ 0 {displaystyle A,fin F_{2}[T],f eq 0} .

Основные строковые обозначения

A ∗ {displaystyle A^{ast }} — множество всевозможных строк.
A n {displaystyle A^{n}} — множество всевозможных строк длины n.
Для x ∈ A ∗ L ( x ) {displaystyle xin A^{ast }L(x)} — длина строки x {displaystyle x} . Обозначения для длины нулевой строки — λ A {displaystyle lambda _{A}} .
Для x , y ∈ A ∗ {displaystyle x,yin A^{ast }} x | | y {displaystyle x||y} — результат конкатенации строк x {displaystyle x} и y {displaystyle y} .

Биты, байты, слова

b = d e f { 0 , 1 } {displaystyle b{stackrel {mathrm {def} }{=}}left{0,1 ight}} — множество битов.
Рассмотрим множества вида b , b n 1 , ( b n 1 ) n 2 , . . . {displaystyle b,b^{n_{1}},(b^{n_{1}})^{n_{2}},...} . Для такого множества A определим нулевой элемент:

0 b = d e f 0 ∈ b {displaystyle 0_{b}{stackrel {mathrm {def} }{=}}0in b} ;
0 A n = d e f ( 0 A , . . . , 0 A ) ∈ A n {displaystyle 0_{A^{n}}{stackrel {mathrm {def} }{=}}(0_{A},...,0_{A})in A^{n}} для n > 0 {displaystyle n>0} .


Определим B = d e f b 8 {displaystyle B{stackrel {mathrm {def} }{=}}b^{8}} как множество байтов, а W = d e f b 32 {displaystyle W{stackrel {mathrm {def} }{=}}b^{32}} как множество слов.

Для x ∈ A ∗ {displaystyle xin A^{ast }} с A ∈ { b , B , W } {displaystyle Ain left{b,B,W ight}} и l > 0 {displaystyle l>0} определим оператор заполнения:

p a d l ( x ) = d e f { x , L ( x ) ≥ l x | | 0 A l − L ( x ) , L ( x ) < l {displaystyle pad_{l}(x){stackrel {mathrm {def} }{=}}{egin{cases}x,&L(x)geq lx||0_{A^{l-L(x)}},&L(x)<lend{cases}}} .

Оператор преобразования

Оператор преобразования I s r c d s t : s r c → d s t {displaystyle I_{src}^{dst}:src ightarrow dst} выполняет преобразования между элементами Z , F 2 [ T ] , b ∗ , B ∗ , W ∗ {displaystyle Z,F_{2}[T],b^{ast },B^{ast },W^{ast }} .

Схема шифрования

Пара ключей шифрования

В схеме шифрования ACE задействованы два типа ключей:
открытый ключ ACE: ( P , q , g 1 , g 2 , c , d , h 1 , h 2 , k 1 , k 2 ) {displaystyle (P,q,g_{1},g_{2},c,d,h_{1},h_{2},k_{1},k_{2})} .
закрытый ключ ACE: ( w , x , y , z 1 , z 2 ) {displaystyle (w,x,y,z_{1},z_{2})} .
Для заданного параметра размера m {displaystyle m} , такого что 1024 ≤ m ≤ 16384 {displaystyle 1024leq mleq 16384} , компоненты ключей определяются следующим образом:
q {displaystyle q} — 256-битное простое число.
P {displaystyle P} — m-битное простое число, такое что P ≡ 1 ( m o d q ) {displaystyle Pequiv 1(modq)} .
g 1 , g 2 , c , d , h 1 , h 2 {displaystyle g_{1},g_{2},c,d,h_{1},h_{2}} — элементы { 1 , . . . , P − 1 } {displaystyle left{1,...,P-1 ight}} (чей мультипликативный порядок по модулю P {displaystyle P} делит q {displaystyle q} ).
w , x , y , z 1 , z 2 {displaystyle w,x,y,z_{1},z_{2}} — элементы { 0 , . . . , q − 1 } {displaystyle left{0,...,q-1 ight}} .
k 1 , k 2 {displaystyle k_{1},k_{2}} — элементы B ∗ {displaystyle B^{ast }} , для которых L ( k 1 ) = 20 l ′ + 64 {displaystyle L(k_{1})=20l^{prime }+64} и L ( k 2 ) = 32 ⌈ l / 16 ⌉ + 40 {displaystyle L(k_{2})=32leftlceil l/16 ight ceil +40} , где l = ⌈ m / 8 ⌉ {displaystyle l=leftlceil m/8 ight ceil } и l ′ = L b ( ⌈ ( 2 ⌈ l / 4 ⌉ + 4 ) / 16 ⌉ ) {displaystyle l^{prime }=L_{b}(leftlceil (2leftlceil l/4 ight ceil +4)/16 ight ceil )} .

Генерация ключа

Алгоритм. Генерация ключа для схемы шифрования ACE.
Вход: параметра размера m {displaystyle m} , такой что 1024 ≤ m ≤ 16384 {displaystyle 1024leq mleq 16384} .
Выход: пара открытый/закрытый ключ.

  • Сгенерировать случайное простое число q {displaystyle q} , такое что 2 255 < q < 2 256 {displaystyle 2^{255}<q<2^{256}} .
  • Сгенерировать случайное простое число P {displaystyle P} , 2 m − 1 < P < 2 m {displaystyle 2^{m-1}<P<2^{m}} , такое что P ≡ 1 ( m o d q ) {displaystyle Pequiv 1(modq)} .
  • Сгенерировать случайное целое число g 1 ∈ { 2 , . . . , P − 1 } {displaystyle g_{1}in left{2,...,P-1 ight}} , такое что g 1 q ≡ 1 ( m o d P ) {displaystyle g_{1}^{q}equiv 1(modP)} .
  • Сгенерировать случайные целые числа w ∈ { 1 , . . . , q − 1 } {displaystyle win left{1,...,q-1 ight}} и x , y , z 1 , z 2 ∈ { 0 , . . . , q − 1 } {displaystyle x,y,z_{1},z_{2}in left{0,...,q-1 ight}}
  • Вычислить следующие целые числа в { 1 , . . . , P − 1 } {displaystyle left{1,...,P-1 ight}} :

    g 2 ← g 1 w r e m P {displaystyle g_{2}leftarrow g_{1}^{w}remP} ,


    c ← g 1 x r e m P {displaystyle cleftarrow g_{1}^{x}remP} ,


    d ← g 1 y r e m P {displaystyle dleftarrow g_{1}^{y}remP} ,


    h 1 ← g 1 z 1 r e m P {displaystyle h_{1}leftarrow g_{1}^{z_{1}}remP} ,


    h 2 ← g 1 z 2 r e m P {displaystyle h_{2}leftarrow g_{1}^{z_{2}}remP} .

  • Сгенерировать случайные байтовые строки k 1 ∈ B 20 l ′ + 64 {displaystyle k_{1}in B^{20l^{prime }+64}} и k 2 ∈ B 2 ⌈ l / 16 ⌉ + 40 {displaystyle k_{2}in B^{2leftlceil l/16 ight ceil +40}} , где l = L B ( P ) {displaystyle l=L_{B}(P)} и l ′ = L B ( ⌈ ( 2 ⌈ l / 4 ⌉ + 4 ) / 16 ⌉ ) {displaystyle l^{prime }=L_{B}(leftlceil (2leftlceil l/4 ight ceil +4)/16 ight ceil )} .
  • Вернуть пару открытый/закрытый ключ

    ( ( P , q , g 1 , g 2 , c , d , h 1 , h 2 , k 1 , k 2 ) , ( w , x , y , z 1 , z 2 ) ) {displaystyle ((P,q,g_{1},g_{2},c,d,h_{1},h_{2},k_{1},k_{2}),(w,x,y,z_{1},z_{2}))}

  • Представление шифротекста

    Шифротекст в схеме шифрования ACE имеет вид

    ( s , u 1 , u 2 , v , e ) {displaystyle (s,u_{1},u_{2},v,e)} ,


    где компоненты определяются следующим образом:
    u 1 , u 2 , v {displaystyle u_{1},u_{2},v} — целые числа из { 1 , . . . , P − 1 } {displaystyle left{1,...,P-1 ight}} (чей мультипликативный порядок по модулю P {displaystyle P} делит q {displaystyle q} ).
    s {displaystyle s} — элемент W 4 {displaystyle W^{4}} .
    e {displaystyle e} — элемент B ∗ {displaystyle B^{ast }} .
    s , u 1 , u 2 , v {displaystyle s,u_{1},u_{2},v} назовём преамбулой, а e {displaystyle e} — криптограммой. Если текст — строка из l {displaystyle l} байт, то тогда длина e {displaystyle e} равна l + 16 ⌈ l / 1024 ⌉ {displaystyle l+16leftlceil l/1024 ight ceil } .

    Необходимо ввести функцию C E n c o d e {displaystyle CEncode} , которая представляет шифротекст в виде байтовой строки, а также обратную функцию C D e c o d e {displaystyle CDecode} . Для целого l > 0 {displaystyle l>0} , символьной строки s ∈ W 4 {displaystyle sin W^{4}} , целых 0 ≤ u 1 , u 2 , v < 256 l {displaystyle 0leq u_{1},u_{2},v<256^{l}} , и байтовой строки e ∈ B ∗ {displaystyle ein B^{ast }} ,

    C E n c o d e ( l , s , u 1 , u 2 , v , e ) = d e f I W ∗ B ∗ ( s ) | | p a d l ( I Z B ∗ ( u 1 ) ) | | p a d l ( I Z B ∗ ( u 2 ) ) | | p a d l ( I Z B ∗ ( v ) ) | | e ∈ B ∗ {displaystyle CEncode(l,s,u_{1},u_{2},v,e){stackrel {mathrm {def} }{=}}I_{W^{ast }}^{B^{ast }}(s)||pad_{l}(I_{Z}^{B^{ast }}(u_{1}))||pad_{l}(I_{Z}^{B^{ast }}(u_{2}))||pad_{l}(I_{Z}^{B^{ast }}(v))||ein B^{ast }} .


    Для целого l > 0 {displaystyle l>0} , байтовой строки ψ ∈ B ∗ {displaystyle psi in B^{ast }} , для которой L ( ψ ) ≥ 3 l + 16 {displaystyle L(psi )geq 3l+16} ,

    C D e c o d e ( l , ψ ) = d e f ( I B ∗ W ∗ ( [ ψ ] 0 16 ) , I B ∗ Z ( [ ψ ] 16 16 + l ) , I B ∗ Z ( [ ψ ] 16 + l 16 + 2 l ) , I B ∗ Z ( [ ψ ] 16 + 2 l 16 + 3 l ) , [ ψ ] 16 + 3 l L ( ψ ) ) ∈ W 4 × Z × Z × Z × B ∗ {displaystyle CDecode(l,psi ){stackrel {mathrm {def} }{=}}(I_{B^{ast }}^{W^{ast }}({Bigl [}psi {Bigr ]}_{0}^{16}),I_{B^{ast }}^{Z}({Bigl [}psi {Bigr ]}_{16}^{16+l}),I_{B^{ast }}^{Z}({Bigl [}psi {Bigr ]}_{16+l}^{16+2l}),I_{B^{ast }}^{Z}({Bigl [}psi {Bigr ]}_{16+2l}^{16+3l}),{Bigl [}psi {Bigr ]}_{16+3l}^{L(psi )})in W^{4} imes Z imes Z imes Z imes B^{ast }} .

    Процесс шифрования

    Алгоритм. Асимметричный процесс шифрования ACE.
    Вход: открытый ключ ( P , q , g 1 , g 2 , c , d , h 1 , h 2 , k 1 , k 2 ) {displaystyle (P,q,g_{1},g_{2},c,d,h_{1},h_{2},k_{1},k_{2})} и байтовая строка M ∈ B ∗ {displaystyle Min B^{ast }} .
    Выход: байтовая строка — шифротекст ψ   {displaystyle psi } , полученный из M {displaystyle M} .

  • Сгенерировать случайное r ∈ { 0 , . . . , q − 1 } {displaystyle rin left{0,...,q-1 ight}} .
  • Сгенерировать преамбулу шифротекста:
  • Сгенерировать s ∈ W 4 {displaystyle sin W^{4}} .
  • Вычислить u 1 ← g 1 r r e m P {displaystyle u_{1}leftarrow g_{1}^{r}remP} , u 2 ← g 2 r r e m P {displaystyle u_{2}leftarrow g_{2}^{r}remP} .
  • Вычислить α   ← U O W H a s h ′ ( k 1 , L B ( P ) , s , u 1 , u 2 ) ∈ Z {displaystyle alpha leftarrow UOWHash^{prime }(k_{1},L_{B}(P),s,u_{1},u_{2})in Z} ; заметим, что 0 < α   < 2 160 {displaystyle 0<alpha <2^{160}} .
  • Вычислить v ← c r d α   r r e m P {displaystyle vleftarrow c^{r}d^{alpha r}remP} .
  • Вычислить ключ для операции симметричного шифрования:
  • h 1 ~ ← h 1 r r e m P {displaystyle { ilde {h_{1}}}leftarrow h_{1}^{r}remP} , h 2 ~ ← h 2 r r e m P {displaystyle { ilde {h_{2}}}leftarrow h_{2}^{r}remP} .
  • Вычислить k ← E S H a s h ( k , L B ( P ) , s , u 1 , u 2 , h 1 ~ , h 2 ~ ) ∈ W 8 {displaystyle kleftarrow ESHash(k,L_{B}(P),s,u_{1},u_{2},{ ilde {h_{1}}},{ ilde {h_{2}}})in W^{8}} .
  • Вычислить криптограмму e ← S E n c ( k , s , 1024 , M ) {displaystyle eleftarrow SEnc(k,s,1024,M)} .
  • Закодировать шифротекст:

    ψ   ← C E n c o d e ( L B ( P ) , s , u 1 , u 2 , v , e ) {displaystyle psi leftarrow CEncode(L_{B}(P),s,u_{1},u_{2},v,e)} .

  • Вернуть ψ   {displaystyle psi } .
  • Перед запуском процесса симметричного шифрования входное сообщение M ∈ B ∗ {displaystyle Min B^{ast }} разбивается на блоки M 1 , . . . , M t {displaystyle M_{1},...,M_{t}} , где каждый блок кроме, возможно, последнего имеет 1024 байт. Каждый блок шифруется потоковым шифратором. Для каждого зашифрованного блока E i {displaystyle E_{i}} вычисляется 16-байтовый код аутентификации. Получаем криптограмму

    e = E 1 | | C 1 | | . . . | | E t | | C t {displaystyle e=E_{1}||C_{1}||...||E_{t}||C_{t}} .

    L ( e ) = L ( M ) + 16 ⌈ L ( M ) / m ⌉ {displaystyle L(e)=L(M)+16leftlceil L(M)/m ight ceil } . Заметим, что если L ( M ) = 0 {displaystyle L(M)=0} , то L ( e ) = 0 {displaystyle L(e)=0} .

    Алгоритм. Симметричный процесс шифрования ACE.
    Вход: ( k , s , M , m ) ∈ W 8 × W 4 × Z × B ∗ {displaystyle (k,s,M,m)in W^{8} imes W^{4} imes Z imes B^{ast }} m > 0 {displaystyle m>0}
    Выход: e ∈ B l {displaystyle ein B^{l}} , l = L ( M ) + 16 ⌈ L ( N ) / m ⌉ {displaystyle l=L(M)+16leftlceil L(N)/m ight ceil } .

  • Если M = λ B {displaystyle M=lambda _{B}} , тогда вернуть λ B {displaystyle lambda _{B}} .
  • Проинициализировать генератор псевдо-случайных чисел:
  • g e n S t a t e ← I n i t G e n ( k , s ) ∈ G e n S t a t e {displaystyle genStateleftarrow InitGen(k,s)in GenState}

  • Сгенерировать ключ k A X U A X U H a s h {displaystyle k_{AXU}AXUHash} :
  • ( k A X U , g e n S t a t e ) ← G e n W o r d s ( ( 5 L b ( ⌈ m / 64 ⌉ ) + 24 ) , g e n S t a t e ) . {displaystyle (k_{AXU},genState)leftarrow GenWords((5L_{b}(leftlceil m/64 ight ceil )+24),genState).} .

  • e ← λ B , i ← 0 {displaystyle eleftarrow lambda _{B},ileftarrow 0} .
  • Пока i < L ( M ) {displaystyle i<L(M)} , выполнять следующее:
  • r ← m i n ( L ( M ) − i , m ) {displaystyle rleftarrow min(L(M)-i,m)} .
  • Сгенерировать значения масок для шифрования и MAC:
  • ( m a s k m , g e n S t a t e ) ← G e n W o r d s ( 4 , g e n S t a t e ) {displaystyle (mask_{m},genState)leftarrow GenWords(4,genState)} .
  • ( m a s k e , g e n S t a t e ) ← G e n W o r d s ( r , g e n S t a t e ) {displaystyle (mask_{e},genState)leftarrow GenWords(r,genState)} .
  • Зашифровать текст: e n c ← [ M ] i i + r ⊕ m a s k e {displaystyle encleftarrow {Bigl [}M{Bigr ]}_{i}^{i+r}oplus mask_{e}} .
  • Сгенерировать аутентификационный код сообщения:
  • Если i + r = L ( M ) {displaystyle i+r=L(M)} , тогда l a s t B l o c k ← 1 {displaystyle lastBlockleftarrow 1} ; иначе l a s t B l o c k ← 0 {displaystyle lastBlockleftarrow 0} .
  • m a c ← A X U H a s h ( k A X U , l a s t B l o c k , e n c ) ∈ W 4 {displaystyle macleftarrow AXUHash(k_{AXU},lastBlock,enc)in W^{4}} .
  • Обновить шифротекст: e ← e | | e n c | | I W ∗ B ∗ ( m a c ⊕ m a s k m ) {displaystyle eleftarrow e||enc||I_{W^{ast }}^{B^{ast }}(macoplus mask_{m})} .
  • i ← i + r {displaystyle ileftarrow i+r} .
  • Вернуть e {displaystyle e} .
  • Процесс дешифрования

    Алгоритм. Процесс дешифрования ACE.
    Вход: открытый ключ ( P , q , g 1 , g 2 , c , d , h 1 , h 2 , k 1 , k 2 ) {displaystyle (P,q,g_{1},g_{2},c,d,h_{1},h_{2},k_{1},k_{2})} и соответствующий закрытый ключ ( w , x , y , z 1 , z 2 ) {displaystyle (w,x,y,z_{1},z_{2})} , байтовая строка ψ ∈ B ∗ {displaystyle psi in B^{ast }} .
    Выход: Расшифрованное сообщение M ∈ B ∗ ∪ R e j e c t {displaystyle Min B^{ast }cup {Reject}} .

  • Дешифровать шифротекст:
  • Если L ( ψ ) < 3 L B ( P ) + 16 {displaystyle L(psi )<3L_{B}(P)+16} , тогда вернуть R e j e c t {displaystyle Reject} .
  • Вычислить:

    ( s , u 1 , u 2 , v , e ) ← C D e c o d e ( L B ( P ) , ψ ) ∈ W 4 × Z × Z × Z × B ∗ {displaystyle (s,u_{1},u_{2},v,e)leftarrow CDecode(L_{B}(P),psi )in W^{4} imes Z imes Z imes Z imes B^{ast }} ;


    заметим, что 0 ≤ u 1 , u 2 , v < 256 l {displaystyle 0leq u_{1},u_{2},v<256^{l}} , где l = L B ( P ) {displaystyle l=L_{B}(P)} .
  • Подтвердить преамбулу шифротекста:
  • Если u 1 ≥ P {displaystyle u_{1}geq P} или u 2 ≥ P {displaystyle u_{2}geq P} или v ≥ P {displaystyle vgeq P} , тогда вернуть R e j e c t {displaystyle Reject} .
  • Если u 1 q ≠ 1 r e m P {displaystyle u_{1}^{q} eq 1remP} , тогда вернуть R e j e c t {displaystyle Reject} .
  • r e j e c t ← 0 {displaystyle rejectleftarrow 0} .
  • Если u 2 ≠ u 1 w r e m P {displaystyle u_{2} eq u_{1}^{w}remP} , тогда r e j e c t ← 1 {displaystyle rejectleftarrow 1} .
  • Вычислить α ← U O W H a s h ′ ( k 1 , L B ( P ) , s , u 1 , u 2 ) ∈ Z {displaystyle alpha leftarrow UOWHash^{prime }(k_{1},L_{B}(P),s,u_{1},u_{2})in Z} ; заметим, что 0 ≤ α ≤ 2 160 {displaystyle 0leq alpha leq 2^{160}} .
  • Если v ≠ u 1 x + α y r e m P {displaystyle v eq u_{1}^{x+{alpha }y}remP} , тогда r e j e c t ← 1 {displaystyle rejectleftarrow 1} .
  • Если r e j e c t = 1 {displaystyle reject=1} , тогда вернуть R e j e c t {displaystyle Reject} .
  • Вычислить ключ для процесс симметричного дешифрования:
  • h 1 ~ ← u 1 z 1 r e m P {displaystyle { ilde {h_{1}}}leftarrow u_{1}^{z_{1}}remP} , h 2 ~ ← u 1 z 2 r e m P {displaystyle { ilde {h_{2}}}leftarrow u_{1}^{z_{2}}remP} .
  • Вычислить k ← E S H a s h ( k 2 , L B ( P ) , s , u 1 , h 1 ~ , h 2 ~ ) ∈ W 8 {displaystyle kleftarrow ESHash(k_{2},L_{B}(P),s,u_{1},{ ilde {h_{1}}},{ ilde {h_{2}}})in W^{8}} .
  • Вычислить M ← S D e c ( k , s , 1024 , e ) {displaystyle Mleftarrow SDec(k,s,1024,e)} ;заметим, что S D e c {displaystyle SDec} может вернуть R e j e c t {displaystyle Reject} .
  • Вернуть M {displaystyle M} .
  • Алгоритм. Операция дешифрования S D e c {displaystyle SDec} .
    Вход: ( k , s , m , e ) ∈ W 8 × W 4 × Z × B ∗ {displaystyle (k,s,m,e)in W^{8} imes W^{4} imes Z imes B^{ast }} m > 0 {displaystyle m>0}
    Выход: Расшифрованное сообщение M ∈ B ∗ ∪ R e j e c t {displaystyle Min B^{ast }cup {Reject}} .

  • Если e = λ B {displaystyle e=lambda _{B}} , тогда вернуть λ B {displaystyle lambda _{B}} .
  • Проинициализировать генератор псевдо-случайных чисел:

    g e n S t a t e ← I n i t G e n ( k , s ) ∈ G e n S t a t e {displaystyle genStateleftarrow InitGen(k,s)in GenState}

  • Сгенерировать ключ k A X U A X U H a s h {displaystyle k_{AXU}AXUHash} :

    ( k A X U , g e n S t a t e ′ ) ← G e n W o r d s ( ( 5 L b ( ⌈ m / 64 ⌉ ) + 24 ) , g e n S t a t e ) . {displaystyle (k_{AXU},genState^{prime })leftarrow GenWords((5L_{b}(leftlceil m/64 ight ceil )+24),genState).} .

  • M ← λ B , i ← 0 {displaystyle Mleftarrow lambda _{B},ileftarrow 0} .
  • Пока i < L ( e ) {displaystyle i<L(e)} , выполнять следующее:
  • r ← m i n ( L ( e ) − i , m + 16 ) − 16 {displaystyle rleftarrow min(L(e)-i,m+16)-16} .
  • Если r ≤ 0 {displaystyle rleq 0} , тогда вернуть R e j e c t {displaystyle Reject} .
  • Сгенерировать значения масок для шифрования и MAC:
  • ( m a s k m , g e n S t a t e ) ← G e n W o r d s ( 4 , g e n S t a t e ) {displaystyle (mask_{m},genState)leftarrow GenWords(4,genState)} .
  • ( m a s k e , g e n S t a t e ) ← G e n W o r d s ( r , g e n S t a t e ) {displaystyle (mask_{e},genState)leftarrow GenWords(r,genState)} .
  • Подтвердить аутентификационный код сообщения:
  • Если i + r + 16 = L ( M ) {displaystyle i+r+16=L(M)} , тогда l a s t b l o c k ← 1 {displaystyle lastblockleftarrow 1} ; иначе l a s t b l o c k ← 0 {displaystyle lastblockleftarrow 0} .
  • m a c ← A X U H a s h ( k A X U , l a s t B l o c k , [ e ] i i + r ) ∈ W 4 {displaystyle macleftarrow AXUHash(k_{AXU},lastBlock,{Bigl [}e{Bigr ]}_{i}^{i+r})in W^{4}} .
  • Если [ e ] r i + r i + r + 16 ≠ I W ∗ B ∗ ( m a c ⊕ m a s k m ) {displaystyle {Bigl [}e{Big ]}r_{i+r}^{i+r+16} eq I_{W^{ast }}^{B^{ast }}(macoplus mask_{m})} , тогда вернуть R e j e c t {displaystyle Reject} .
  • Обновить текст: M ← M | | ( [ e ] i i + r ) ⊕ m a s k e ) {displaystyle Mleftarrow M||({Bigl [}e{Bigr ]}_{i}^{i+r})oplus mask_{e})} .
  • i ← i + r + 16 {displaystyle ileftarrow i+r+16} .
  • Вернуть M {displaystyle M} .
  • Схема цифровой подписи

    В схеме цифровой подписи ACE задействованы два типа ключей:
    открытый ключ цифровой подписи ACE: ( N , h , x , e ′ , k ′ , s ) {displaystyle (N,h,x,e^{prime },k^{prime },s)} .
    закрытый ключ цифровой подписи ACE: ( p , q , a ) {displaystyle (p,q,a)} .
    Для заданного параметра размера m {displaystyle m} , такого что 1024 ≤ m ≤ 16384 {displaystyle 1024leq mleq 16384} , компоненты ключей определяются следующим образом:
    p {displaystyle p} — ⌊ m / 2 ⌋ {displaystyle leftlfloor m/2 ight floor } -битное простое число, для которого ( p − 1 ) / 2 {displaystyle (p-1)/2} — тоже простое.
    q {displaystyle q} — ⌊ m / 2 ⌋ {displaystyle leftlfloor m/2 ight floor } -битное простое число, для которого ( q − 1 ) / 2 {displaystyle (q-1)/2} — тоже простое.
    N {displaystyle N} — N = p q {displaystyle N=pq} и может иметь как m {displaystyle m} , так и m − 1 {displaystyle m-1} бит.
    h , x {displaystyle h,x} — элементы { 1 , . . . , N − 1 } {displaystyle left{1,...,N-1 ight}} (квадратичные остатки по модулю N {displaystyle N} ).
    e ′ {displaystyle e^{prime }} — 161-битное простое число.
    a {displaystyle a} — элемент { 0 , . . . , ( p − 1 ) ( q − 1 ) / 4 − 1 } {displaystyle left{0,...,(p-1)(q-1)/4-1 ight}}
    k ′ {displaystyle k^{prime }} — элементы B 184 {displaystyle B^{184}} .
    s {displaystyle s} — элементы B 32 {displaystyle B^{32}} .

    Генерация ключа

    Алгоритм. Генерация ключа для схемы цифровой подписи ACE.
    Вход: параметра размера m {displaystyle m} , такой что 1024 ≤ m ≤ 16384 {displaystyle 1024leq mleq 16384} .
    Выход: пара открытый/закрытый ключ.

  • Сгенерировать случайные простые числа p , q {displaystyle p,q} , такие что ( p − 1 ) / 2 {displaystyle (p-1)/2} и ( q − 1 ) / 2 {displaystyle (q-1)/2} — тоже простые, и

    2 m 1 − 1 < p < 2 m 1 {displaystyle 2^{m_{1}-1}<p<2^{m_{1}}} , 2 m 2 − 1 < q < 2 m 2 {displaystyle 2^{m_{2}-1}<q<2^{m_{2}}} , и p ≠ q {displaystyle p eq q} ,


    где

    m 1 = ⌊ m / 2 ⌋ {displaystyle m_{1}=leftlfloor m/2 ight floor } и m 1 = ⌈ m / 2 ⌉ {displaystyle m_{1}=leftlceil m/2 ight ceil } .

  • Положить N ← p q {displaystyle Nleftarrow pq} .
  • Сгенерировать случайное простое число e ′ {displaystyle e^{prime }} , где 2 160 ≤ e ′ ≤ 2 161 {displaystyle 2^{160}leq e^{prime }leq 2^{161}} .
  • Сгенерировать случайное h ′ ∈ { 1 , . . . , N − 1 } {displaystyle h^{prime }in left{1,...,N-1 ight}} , при условии g c d ( h ′ , N ) = 1 {displaystyle gcd(h^{prime },N)=1} и g c d ( h ′ ± 1 , N ) = 1 {displaystyle gcd(h^{prime }pm 1,N)=1} , и вычислить h ← ( h ′ ) − 2 r e m N {displaystyle hleftarrow (h^{prime })^{-2}remN} .
  • Сгенерировать случайное a ∈ { 0 , . . . , ( p − 1 ) ( q − 1 ) / 4 − 1 } {displaystyle ain left{0,...,(p-1)(q-1)/4-1 ight}} и вычислить x ← h a r e m N {displaystyle xleftarrow h^{a}remN} .
  • Сгенерировать случайные байтовые строки k ′ ∈ B 184 {displaystyle k^{prime }in B^{184}} , и s ∈ B 32 {displaystyle sin B^{32}} .
  • Вернуть пару открытый ключ/закрытый ключ

    ( ( N , h , x , e ′ , k ′ , s ) , ( p , q , a ) ) {displaystyle ((N,h,x,e^{prime },k^{prime },s),(p,q,a))} .

  • Представление подписи

    Подпись в схеме цифровой подписи ACE имеет вид ( d , w , y , y ′ , k ~ ) {displaystyle (d,w,y,y^{prime },{ ilde {k}})} , где компоненты определяются следующим образом:
    d {displaystyle d} — элемент B 64 {displaystyle B^{64}} .
    w {displaystyle w} — целое число, такое что 2 160 ≤ w ≤ 2 161 {displaystyle 2^{160}leq wleq 2^{161}} .
    y , y ′ {displaystyle y,y^{prime }} — элементы { 1 , . . . , N − 1 } {displaystyle left{1,...,N-1 ight}} .
    k ~ {displaystyle { ilde {k}}} — элемент B ∗ {displaystyle B^{ast }} ;заметим, что L ( k ~ ) = 64 + 20 L B ( ⌈ ( L ( M ) + 8 ) / 64 ⌉ ) {displaystyle L({ ilde {k}})=64+20L_{B}(leftlceil (L(M)+8)/64 ight ceil )} , где M {displaystyle M} — подписываемое сообщение.

    Необходимо ввести функцию S E n c o d e {displaystyle SEncode} , которая представляет подпись в виде байтовой строки, а также обратную функцию S D e c o d e {displaystyle SDecode} . Для целого l > 0 {displaystyle l>0} , байтовой строки d ∈ B 64 {displaystyle din B^{64}} , целых 0 ≤ w ≤ 256 21 {displaystyle 0leq wleq 256^{21}} и 0 ≤ y , y ′ < 256 l {displaystyle 0leq y,y^{prime }<256^{l}} , и байтовой строки k ~ ∈ B ∗ {displaystyle { ilde {k}}in B^{ast }} ,

    S E n c o d e ( l , d , w , y , y ′ , k ~ ) = d e f d | | p a d 21 ( I Z B ∗ ( w ) ) | | p a d l ( I Z B ∗ ( y ) ) | | p a d l ( I Z B ∗ ( y ′ ) ) | | k ~ ∈ B ∗ {displaystyle SEncode(l,d,w,y,y^{prime },{ ilde {k}}){stackrel {mathrm {def} }{=}}d||pad_{21}(I_{Z}^{B^{ast }}(w))||pad_{l}(I_{Z}^{B^{ast }}(y))||pad_{l}(I_{Z}^{B^{ast }}(y^{prime }))||{ ilde {k}}in B^{ast }} .


    Для целого l > 0 {displaystyle l>0} , байтовой строки σ ∈ B ∗ {displaystyle sigma in B^{ast }} , для которой L ( σ ) ≥ 2 l + 53 {displaystyle L(sigma )geq 2l+53} ,

    C S e c o d e ( l , σ ) = d e f ( [ σ ] 0 64 , I B ∗ Z ( [ σ ] 64 85 ) , I B ∗ Z ( [ σ ] 85 85 + l ) , I B ∗ Z ( [ σ ] 85 + l 85 + 2 l ) , [ σ ] 85 + 2 l L ( σ ) ) ∈ B 64 × Z × Z × Z × B ∗ {displaystyle CSecode(l,sigma ){stackrel {mathrm {def} }{=}}({Bigl [}sigma {Bigr ]}_{0}^{64},I_{B^{ast }}^{Z}({Bigl [}sigma {Bigr ]}_{64}^{85}),I_{B^{ast }}^{Z}({Bigl [}sigma {Bigr ]}_{85}^{85+l}),I_{B^{ast }}^{Z}({Bigl [}sigma {Bigr ]}_{85+l}^{85+2l}),{Bigl [}sigma {Bigr ]}_{85+2l}^{L(sigma )})in B^{64} imes Z imes Z imes Z imes B^{ast }} .

    Процесс генерирования подписи

    Алгоритм. Генерирование цифровой подписи ACE.
    Вход: открытый ключ ( N , h , x , e ′ , k ′ , s ) {displaystyle (N,h,x,e^{prime },k^{prime },s)} и соответствующий закрытый ключ ( p , q , a ) {displaystyle (p,q,a)} и байтовая строка M ∈ B ∗ {displaystyle Min B^{ast }} , 0 ≤ L ( M ) ≤ 2 64 {displaystyle 0leq L(M)leq 2^{64}} .
    Выход: байтовая строка — цифровая подпись σ ∈ B ∗ {displaystyle sigma in B^{ast }} .

  • Произвести следующие действия для хеширования входных данных:
  • Сгенерировать случайно ключ хеша k ~ ∈ B 20 m + 64 {displaystyle { ilde {k}}in B^{20m+64}} , такой что m = L b ( ⌈ ( L ( M ) + 8 ) / 64 ⌉ ) {displaystyle m=L_{b}(leftlceil (L(M)+8)/64 ight ceil )} .
  • Вычислить m h ← I W ∗ Z ( U O W H a s h ′ ′ ( k ~ , M ) ) {displaystyle m_{h}leftarrow I_{W^{ast }}^{Z}(UOWHash^{prime prime }({ ilde {k}},M))} .
  • Выбрать случайное y ~ ∈ { 1 , . . . , N − 1 } {displaystyle { ilde {y}}in left{1,...,N-1 ight}} , и вычислить y ′ ← y ~ 2 r e m N {displaystyle y^{prime }leftarrow { ilde {y}}^{2}remN} .
  • Вычислить x ′ ← ( y ′ ) r ′ h m h r e m N {displaystyle x^{prime }leftarrow (y^{prime })^{r^{prime }}h^{m_{h}}remN} .
  • Сгенерировать случайное простое число e {displaystyle e} , 2 160 ≤ e ≤ 2 161 {displaystyle 2^{160}leq eleq 2^{161}} , и его подтверждение корректности ( w , d ) {displaystyle (w,d)} : ( e , w , d ) ← G e n C e r t P r i m e ( s ) {displaystyle (e,w,d)leftarrow GenCertPrime(s)} . Повторять этот шаг до тех пор, когда e ≠ e ′ {displaystyle e eq e^{prime }} .
  • Положить r ← U O W H a s h ′ ′ ′ ( k ′ , L B ( N ) , x ′ , k ~ ) ∈ Z {displaystyle rleftarrow UOWHash^{prime prime prime }(k^{prime },L_{B}(N),x^{prime },{ ilde {k}})in Z} ; заметим, что 0 ≤ r < 2 160 {displaystyle 0leq r<2^{160}} .
  • Вычислить y ← h b r e m N {displaystyle yleftarrow h^{b}remN} , где

    b ← e − 1 ( a − r ) r e m ( p ′ q ′ ) {displaystyle bleftarrow e^{-1}(a-r)rem(p^{prime }q^{prime })} ,


    и где p ′ = ( p − 1 ) / 2 {displaystyle p^{prime }=(p-1)/2} и q ′ = ( q − 1 ) / 2 {displaystyle q^{prime }=(q-1)/2} .
  • Закодировать подпись:

    σ ← S E n c o d e ( L B ( N ) , d , w , y , y ′ , k ~ ) {displaystyle sigma leftarrow SEncode(L_{B}(N),d,w,y,y^{prime },{ ilde {k}})} .

  • Замечания

    В схемах шифрования и цифровой подписи ACE используются некоторые вспомогательные функции(такие как, например, UOWHash,ESHash и другие), описание которых выходит за рамки данной статьи. Подробнее о данных функциях можно найти в.

    Реализация, применение и производительность

    Схема шифрования ACE рекомендована проектом NESSIE (New European Schemes for Signatures, Integrity and Encryption) как асимметричная схема шифрования. Пресс-релиз датирован февралем 2003.
    Обе схемы были реализованы в ANSI C, с использованием пакета GNU GMP. Тесты были проведены на двух платформах: Power PC 604 model 43P под системой AIX и 266 MHz Pentium под системой Windows NT. Таблицы показателей приведены ниже:
    Таблица 1. Временные затраты на базовые операции.


    Таблица 2. Производительность схем шифрования и цифровой подписи.


    Добавить комментарий
    Ваше Имя:
    Ваш E-Mail:
    • bowtiesmilelaughingblushsmileyrelaxedsmirk
      heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
      winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
      worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
      expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
      disappointedconfoundedfearfulcold_sweatperseverecrysob
      joyastonishedscreamtired_faceangryragetriumph
      sleepyyummasksunglassesdizzy_faceimpsmiling_imp
      neutral_faceno_mouthinnocent