広告

【ディジタル署名】RSA署名についてまとめてみた

現代社会では、インターネットを通じた取引や情報共有が日常的に行われています。

しかし、その中で重要なのが「データの真正性」を確認する手段です。送信されたデータが改ざんされていないことや、送信者が正当であることを保証する仕組みがなければ、情報の信頼性が損なわれてしまいます。

この問題を解決するために利用されている技術の一つが、RSA署名です。

RSA署名は、公開鍵暗号方式の一種であるRSA暗号を応用したデジタル署名技術です。RSA暗号についてわからない方は、以前執筆した記事を読んでみてください。

この署名技術は、メッセージの作成者が誰であるかを証明するとともに、メッセージが改ざんされていないことを保証します。

オンラインバンキングや電子契約、電子メールの認証など、私たちの日常生活にも密接に関わっています。

今回はRSA暗号の理論を用いたディジタル署名の生成と検証の論理についてまとめてみました。

この記事では、RSA暗号の理論と公開鍵暗号を理解していることを前提に解説しています。

  • ディジタル署名
  • RSA署名

RSA署名について

ディジタル署名について確認しておきましょう。

署名者は平文に対して、署名者の秘密鍵で署名します。

一方、検証者はこの署名文を公開鍵で戻したものと、平文が一致するかを確認します。一致すれば署名者本人であることが確認でき、一致しなければ平文が改ざんされていると判断できます。

次はRSA署名の流れを見ていきましょう。

自然数Nを求める

まず大きな自然数Nを作るために、2つの素数p, qを選びます。

$N=pq$

このときpとqは巨大な素数を選びます。

公開鍵を決める

ファイ関数を\(\varphi(N)\)とします。

公開鍵として使うeを求めます。eは1より大きく\(\varphi(N)\)より小さい整数かつ、\(\varphi(N)\)と互いに素である必要があります。

秘密鍵を求める

公開鍵eに対して秘密鍵dを求めます。dは以下の式を満たす整数です。

$ed≡1\bmod \varphi(N)$

このdが秘密鍵の一部となります。

この結果、(n, e)が公開鍵として公開され、(n, d)が秘密鍵として保管されます。

署名する

$S\equiv M^{d}\bmod n$

検証する

$M’\equiv S^{e} \bmod n$

この\(M’\)が平文Mと等しいかどうか調べることで改ざんされているか判断できます。

具体例

具体的な数字でRSA署名が成り立つことを確認しましょう。

本来は大きな自然数Nを作りますが、大きくしすぎると手計算が大変なので、今回は小さな数を用いています。

\(p=2, q=11\)を選択し、\(N=22\)を作ります。また、公開鍵は\(e=3\)として考えます。

ファイ関数\(\varphi(N)\)を求める

ファイ関数\(\varphi(N)\)は\(\varphi(N)=(p-1)(q-1)\)によって求めることができます。

そのため、今回は\(N=2×11\)より、

$\varphi(22)=(2-1)(11-1)=10$

と求まります。ここで、公開鍵\(e=3\)を確認すると、\(e\)は\(\varphi(22)\)と互いに素になっていることが確認できました。

秘密鍵を求める

公開鍵とファイ関数の値から秘密鍵dを求めます。

$e \times d \equiv 1 \bmod \varphi(22)$

上記より、\(d \equiv 3^{-1} \equiv 7 \bmod 10\)と秘密鍵が求まりました。

平文M=3に対して署名する

今回は、例としてM=3に署名します。

$S \equiv 3^{7} \equiv27\times27\times3 \equiv 5\times5\times3 \equiv 9 \bmod22$

よって、署名S=9となりました。

署名S=9を検証する

先ほど求めた署名Sを検証して平文Mと一致するか調べてみましょう。

$S^{e} \equiv 9^3\equiv81\times9 \equiv 15\times9\equiv3 \bmod 22$

平文M=3と\(S^e\)の値が一致することが確認できました。

つまり、改ざんされていないものと判断できます。

まとめ

この記事のまとめ

今回は、RSA署名の理論について解説しました。

RSA暗号では公開鍵で暗号化し、秘密鍵で復号化をします。一方、署名では秘密鍵で署名、公開鍵で検証する点に注意しましょう。

最後までご覧いただき、ありがとうございます。お疲れ様でした。

コメント

タイトルとURLをコピーしました