tanke25616429のアウトプット

IT技術の基本を勉強したことをアウトプットします。Linux、Kubernetes、クラウド中心です。百番煎じくらいだけど誰かの役に立てばそれはそれでうれしい。

電子署名

電子署名とは

電子署名*1とは電子化された文書に対して行われる電子的な署名のこと電子署名が行われることで以下を保証する。

  1. 署名対象の文書に署名者が承認の意志を示すこと*2
  2. 署名対象の文書が改ざんされていないこと

電子的な文書の送信者、電子署名を付与することによって上記1.と2.を保証する。受信者の目線からすると、その電子署名付きの文書は確かに送り主が承認したものでかつ改ざんされていないことがわかる*3

現実世界との対比

電子署名は、現実世界でいうと署名(サイン)や印鑑に対応する。契約書や申請書に印鑑やサインをすると、1. 署名対象の文書を署名者が承認していることが示される。2.署名対象の文書が改ざんされていないことは契約書等だと対応がつかないので封緘をイメージするとよい*4

現実世界と異なり、コンピュータの世界ではデータは電子的にコピーがいくらでも作られる。したがって、現実の文書と異なり「原本を提示していること」をもって妥当だと判断はできない。電子署名の妥当性は、電子的に検証できる必要がある。

電子署名の要件

上記の1.と2.(ここでは特に1.について。以降、1.の条件を短く「本人性」の証明と呼ぶこととする。)を保証するためには、電子署名には以下の要件がある。以降、「文書」は電子的なデータを指す言葉として使う。

  • (a) 署名者本人にしかその電子署名が生成できないこと
  • (b) (a)が誰にでも検証できること

(a)は言わずもがなで、別人がある文書に対し同じ電子署名を生成できてしまっては、電子署名から本人かどうかを判断できない。これは署名者本人しか知りえない情報を用いて行う(具体的には後述する)。(b)の「誰にでも」は「公開されている情報から」と言い換えたほうがわかりやすいかもしれない。(a)の事実を検証するために、署名者しか知りえない情報を必要とするならば、第三者は誰もそれを検証しえない。秘密の情報を検証のために誰かに渡しては、その時点で秘密ではなくなる。

実現方法

公開鍵暗号における、公開鍵と秘密鍵の鍵ペアによって実現する。電子署名では秘密鍵電子署名の生成に利用し、公開鍵を電子署名の検証に利用する。

f:id:tanke25616429:20200724220438p:plain
電子署名の生成と検証

送信者は受信者に対し以下のデータを送る。秘密鍵は送信者の手元にしかない。

受信者は公開鍵を用いて電子署名が送信者本人にしか生成できないことを検証する。文書から電子署名を生成するのには秘密鍵が必要であるため、文書に対応した電子署名を生成できるのは送信者だけである。数学的な性質により、電子署名の生成自体は秘密鍵なしにはできないが、その文書から電子署名が生成されていることの検証は公開鍵があればできる*5。この非対称性により、要件の(a)と(b)が達成される。

また、電子署名の値は署名対象の文書から生成されるため、文書が異なれば電子署名の値も変わる。つまり、電子署名の検証が成功すれば、文書が改ざんされていないことも保証される。文書を悪意の第三者が改ざんした場合、電子署名の値と整合が取れなくなる。さりとて、悪意の第三者電子署名の値を文書の改ざんに合わせて改ざんすることはできない。電子署名の生成には送信者しか知らない秘密鍵が必要だからである。

参考にしたもの

電子署名の基礎知識|電子認証局会議

デジタル署名の仕組み

qiita.com

*1:デジタル署名ともいう。

*2:最初にこの記事を公開したとき「署名対象の文書が確かに署名者本人によるものであること」と記載していたが、著作権の所在を示すようにも解釈できる、と指摘をいただきそれを反映し記載を改めた。

*3:「承認」というのは、自身が作成した文書にもできるし、他者の文書に対してもできる。現実世界のアナロジーで考えると、申請者が署名をして稟議にかける行為や、決裁者が署名してOKを出す行為があり、どちらも文書に対し承認をする行為といえる。これを逆に言えば、署名した文書(=承認した文書)は後から「知らない」としらばっくれることはできないということである。

*4:現実の封緘では文書が秘匿されていることも目的となるが(将棋の封じ手など)、電子署名では文書秘匿の目的はない。

*5:なぜか、は著者にとって難しい話でよくわかっていないので省略する。