SWEet

A Software Engineer Is Eating Technologies

ディジタル署名とディジタル証明書の違いって?

今回は情報セキュリティスペシャリストの試験勉強中にディジタル証明書の問題で「ん?」っとなったので書いてみました

  • ディジタル署名って何?

    ディジタル署名っていうのはいわゆる現実世界で言う印鑑。送られてきたデータが本当にその人(サーバとか)から送られてきたと証明するための技術。  

    いわゆるデータの 正当性 (完全性とごっちゃになることがある)を保証するためのものなんですね。  

    またディジタル署名は署名を作成できる鍵(公開鍵暗号のうちの秘密鍵)は送信者のみが保持しています。これが漏えいすると色々なところで鍵が勝手につくられちゃって大変!  

    その他にも「このデータは私が送ったよ!」ということを証明するので後で「私そんなデータ送ってないよ!あなたの思い違いでしょ!」といったことにならないような 否認防止 の役割もあります。

    仕組みに関してはハッシュ関数公開鍵暗号方式を組み合わせて電子的な署名を作成してます。ここでは面倒なので省きます。  色々としっかり者のディジタル署名ですがこの署名自体が偽造されたものだったら?データを正しいと証明はできますがディジタル署名自体が自信の正当性を証明することはありません。なのでここで登場するのがディジタル証明書です。

  • ディジタル証明書とは?  第三者機関である「認証局」によって発行される電子式の身分証明書です。SSLサーバー証明書などとも呼ばれます。

    通信相手が送ってきた証明書を認証局の公開鍵で復号化することで通信相手の身元を確認することができます。

    証明する内容としては認証局の情報、通信相手が発行した公開鍵、暗号化されたデジタル署名等があります。  

    ディジタル証明書はITU-T勧告の X.509 で定義されています。  

    しかし、悪意ある攻撃者は認証局になりすまして証明書を発行することがあります。それを防ぐために証明書の利用者情報を登録するRA(登録局)や 証明書の有効性を検証するVA(証明書有効性検証局)といったものがあります。

簡単にディジタル証明書の発行の手続きをまとめてみました。登場人物はwebサーバーとクライアントと認証局です。

  1. webサーバ「webサーバ側で公開鍵と秘密鍵を作成するよ!」
  2. webサーバ「公開鍵が正しいことを証明するための証明書が欲しい!じゃあ公開鍵とその他諸々の証明書送るから認証局にディジタル証明書発行してもらおう!」
  3. 認証局「ふむ。確かにwebサーバが発行したものだな(公開鍵と所有者情報を参照)。よし、秘密鍵で暗号化した署名付きでディジタル証明書にしてやるぞい」
  4. webサーバは証明書を受け取りインストールする
  5. クライアント「webサーバさん!接続要求です!」
  6. webサーバ「じゃあこれうちの証明書ね。保存しといてね」
  7. クライアント「証明書が届いたよ。じゃあこの認証局さんの公開鍵でデジタル署名部分をちょちょいと復号化して... よしハッシュ結果が同じだね!これは正しい署名だ!」

と多分大体こんな感じです。暗号化のところやCRLうんたらのところは複雑になるのですっ飛ばしました。

少し長くなってしまいましたが今回はここらへんで終わっておこうと思います。次は公開鍵暗号とかのまとめかな?

勉強中なので間違ったことを書いてあることが当然あると思うのでその際はご指摘お願いします