公開鍵暗号をプログラムで扱う方法のまとめ


RSAの公開鍵暗号や電子署名の仕組みを使ったプログラムを書く必要があり、そのときにいろいろと調べたので、忘れないうちにまとめておきます。

書いているうちに量が多くなってしまったので、幾つかのエントリに分割して投稿します。(まだリンクがないものは執筆中です)

  • 公開鍵暗号と電子署名の基礎知識
    • これを知らないとそもそも以下のエントリの意味がわからない、という基礎知識を切り出しました。
  • RSA暗号の全体像
    • 公開鍵暗号や電子署名の具体的な仕様の一つが RSA暗号です。デファクトスタンダードと言っても過言ではありません。
    • RSAの仕様は膨大で多岐にわたっていて全体像が把握しづらいので、要点をまとめてみました。
  • OpenSSLコマンドによる公開鍵暗号、電子署名の方法
    • OpenSSLのコマンドを使って公開鍵暗号や電子署名を行う方法をまとめました。
    • OpenSSLは RSA暗号を実際に実装したライブラリやコマンドです。
    • 自分のプログラムが正しく実装されているかを確かめるためには、OpenSSLの出力と比較したり、OpenSSLで作成した署名を検証できるかなどの連携を行ってみるのが近道です。
  • RSA鍵、証明書のファイルフォーマットについて
    • RSAで取り扱う鍵や証明書にはさまざまなファイルフォーマットがあり、その構造を理解していないと混乱します。
    • プログラムで鍵を扱う際にファイルフォーマットの変換が必要になることもあるため、その変換方法などをまとめました。
    • また、鍵ファイルの中身をダンプする方法などもまとめています。
  • PKCS #12 個人情報交換ファイルフォーマットについて
    • 複数の鍵や証明書をひとまとめにできる、個人情報交換ファイルフォーマットについて解説しています。
  • 電子署名のファイルフォーマットについて
    • 電子署名のファイル構造は結構複雑なのですが、あまり分かりやすく解説したものがなかったのでいろいろ調べてみました。
    • ここがよくわかっていないと、異なる暗号化ライブラリ間で署名がうまく検証できないなどのトラブルに見舞われます。
  • iOSで Swiftから暗号化ライブラリを使う
    • iOSには Security Frameworkという暗号のためのライブラリが用意されていて、RSA暗号や電子署名を扱うことができます。
    • 特に Objective-Cではなく Swiftから Security Frameworkを扱う方法や、OpenSSLの鍵をインポートする方法などについてまとめました。
  • Javaの暗号化ライブラリを使う方法(執筆中)
    • Javaには JCE (Java Cryptography Extension) という暗号化拡張ライブラリがあり、公開鍵暗号や電子署名を扱えます。
    • OpenSSLや iOSのSecurity Frameworkで作成した電子署名を検証する方法などをまとめました。