コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:Roget/ACE(暗号方式)

[暗号理論]のところに素因数分解ベースとかあったが, 実はDDH仮定とUOWHFsなハッシュ関数とPRPな共通鍵暗号らしい. というかKEM部分はもろにCramer-Shoup. なぜならACE Encryptの提案者がShoup and Schweinbergerだから. 一方, ACE Signatureの方は素因数分解ベース...というかCramer-Shoup署名.


簡略版

鍵生成

[編集]

1024 ≦ m ≦ 16384.

  1. 256ビットの素数qを生成.
  2. mビットかつ qk+1の形をした素数pを生成.
    1. 以下, Z_P^*の位数qの部分群をGと書く.
  3. Gの生成元g_1をランダムに生成.
  4. w,x,y,z_1,z_2をZ_qからランダムに生成
  5. g_2 = g_1^2, c = g_1^x, d = g_1^y, h_1 = g_1^{z_1}, h_2 = g_1^{z_2}とする.
  6. ハッシュ鍵k_1, k_2をランダムに生成
  7. 公開鍵は(p,q,g_1,g_2,c,d,h_1,h_2,k_1,k_2). 秘密鍵は(w,x,y,z_1,z_2).

暗号化

[編集]

平文をmとする.

  1. 128ビットの数sを任意に生成する. (ランダムではない?)
  2. rをZ_qからランダムに生成.
  3. KEMパート
    1. u_1 = g_1^r, u_2 = g_2^rとする.
    2. 160ビット出力のハッシュ関数Hを用いて, α = H(k_1,s,u_1,u_2)とする.
    3. v = c^r d^{\alpha r}とする.
  4. DEMパート
    1. \tilde{h}_1 = h_1^r, \tilde{h}_2 = h_2^{r}を計算する.
    2. 256ビット出力のハッシュ関数H'を用いて, k = H'(k_2,s,u_1,\tilde{h}_1,\tilde{h}_2)とする.
    3. 鍵長が256ビットの対称鍵暗号Cを用いて, e = C_k(m)を計算する.
  5. 暗号文は, (s,u_1,u_2,v,e).

復号

[編集]
  1. \alpha = H(k_1,s,u_1,u_2)とする.
  2. v≠u_1^{x+\alpha y}ならReject.
  3. \tilde{h}_1 = u_1^{z_1}, \tilde{h}_2 = u_2^{z_2}とする.
  4. k = H'(k_2,s,u_1,\tilde{h}_1,\tilde{h}_2)とする.
  5. m = C_k(e)とする.
  6. mを出力して終了.


http://cryptrec.nict.go.jp/cryptrec_03_0424_outrep.htm