- 締切済み
RSA暗号
S=a^d modN データのビット長をn、dのバイナリ表現を、d=(d[n-1]d[n-2]...d[0])とする。 ; monobit method S=1 For j=n-1 downto 0 S=S^2 modN If d[j]=1 then S=S*a modN EndIf EndFor Return S このときは、S=a^11 modNなどの計算の仕方は分かるのですが、 a(j)=a^j modN, j=0,1,2,...,2^(w)-1 簡単のため、wは、nを割り切るものと仮定。データのビット長をn,dの表現を、d=(d[n/w-1]d[n/w-2]...d[0])(d[j]は、wビットブロック)とする。 ; monobit method S=1 For j=n/w-1 downto 0 S=S^(2^w) modN S=S*a(d[j]) modN EndFor Return S このときは、どういう計算式になるのですか。どういう計算が出来るのですか。s=a^11 modN みたいな計算も出来るのですか。教えてください。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- uyama33
- ベストアンサー率30% (137/450)
同じ値です。 例えば、 10進の15=2進の1111 15=2^3+2^2+2^1+2^0 w=2 として、 a^15=a^(2^3+2^2+2^1+2^0) =a^(2^3+2^2)*a^(2^1+2^0) =a^((2^1+1)*(2^2)) * a^(2^1+2^0) =(a^(2^1+1))^(2^2) * a^(2^1+2^0) 最初に、 S=S*a(d[j]) が計算されて、 それが (2^2)乗されます。 (S=S^(2^w) modN) 最後に、s=(a^(2^1+1))^(2^2) a(d[j]) =a^(d[0]) =a^(2^1+2^0) なので、 S=S*a(d[j]) modN で、a^d が計算できます。 結局同じです。 適当に切っても良いと思いますが、 ループが面倒です。 計算しやすい長さにするのがよい。 11=