ごきげんよう。
公開鍵暗号方式の簡単な仕組みと利用方法
公開鍵を「公開しない」ってどういうこと?
公開鍵を「公開しない」ってどういうこと? (3/3)
上司や顧客から「公開鍵を公開したくない」と言われて困るというグチをたまに見かけます。4月23日には外務省が公開鍵を公開してくれないことが話題となりました。
そもそも「公開鍵を公開したくない」という人は「公開鍵」が何なのかわかってない人ではないかと思う。暗号の話になるのでちょっと分けて説明したい。
公開鍵とは
公開鍵とは、公開鍵暗号方式で暗号化に使用する鍵だ。暗号化された平文を復号化するには公開鍵と対になっている秘密鍵を使用する。そのため、公開鍵だけあっても復号化することはできない。ポイントは公開鍵から秘密鍵を得ることが数学的に極めて困難であるため、秘匿性が守られる点だ。ただし超高性能のマシンで長期間に渡って演算すれば不可能ではないかもしれない。鍵の強度によって演算時間が左右されるが、実用性のある強度の鍵なら数百年単位の時間がかかるとされている。
公開鍵と秘密鍵の簡単な仕組み
組み合わせや強度の増強などで違いはあるが、基本的な仕組みは単純だ。
桁数の大きな素数二つが秘密鍵でその素数を掛け合わせた数値が公開鍵だ。桁数の少ない例でみれば理解が早いと思う。13と17が秘密鍵で221が公開鍵だ。221から秘密鍵を得ようとするなら、221に対して素数で順に割り算をしていくしかない。桁数が少ないので2,3,5,7,11,13と最短で6回の演算で秘密鍵を得られる。それを踏まえて、秘密鍵の桁数が20桁二つの場合はどうだろうか。膨大な時間がかかるのがわかってもらえるかと思う。
秘密鍵の鍵長と暗号強度
鍵の桁数は鍵長といい、基本的にビット単位となる。64ビットで20桁だ。では128ビットなら倍の強度かといえば全く違う。2進数のビット数が64ビットから128ビットになるということは2を64回掛けた倍数分増えると言う事だ。単純にとらえれば、同じ暗号アルゴリズムであれば、鍵長が長いほど暗号強度が高いことになる。一昔前なら64ビットで十分とされてきたが、今なら128ビットは欲しい所だろうか。
公開鍵を公開したくないということは
以上を踏まえて、公開鍵を公開したくないということは二つの理由の内、どちらかと言う事になる。鍵長や暗号強度に不安があるか、公開鍵を理解していないかだ。後者なら笑い話だが、前者は深刻だ。システムの刷新なり暗号強度の強化が必要となる案件になるので、公開鍵の公開以前の話だ。
公開鍵暗号方式以外の暗号
補足として、公開鍵暗号方式以外の暗号にも触れておきたい。こちらは単純で共通鍵暗号方式だ。暗号化も復号化も同じ鍵を使う。こちらの方式は鍵が知られると復号されてしまうので致命的だ。使い方としてメモリ上で秘密鍵が漏れるのを防ぐために、公開鍵暗号方式の秘密鍵を共通鍵暗号方式で暗号化して置くといった手法がある。また共通鍵暗号方式のほうが暗号化復号化の演算時間が短いので鍵の漏洩さえ防げる環境なら使い勝手が良い。暗号化を共通鍵暗号方式で行い、共通鍵を相手の公開鍵で暗号化してセットでやり取りするといった手法もある。公開鍵と共通鍵を混同していると公開鍵を公開しないと言ってしまう人がいるかもしれない。「公開鍵を平文で送るな」という台詞は共通鍵を持ち合って暗号化してやり取りしたいと言う事かもしれない。使い方としてはお勧めできないが。
公開鍵の扱い
何のための公開鍵か理解していれば当然の結論だが、平文で公開すべしだ。ただし暗号強度が十分であることを確認した上で、と但し書きはつく。公開鍵が公開されなければ何もできないので価値が無くなってしまう。公開鍵は十分な強度で平文で公開すべし。
身近な利用例
公開鍵の扱いといっても、身近で公開鍵と秘密鍵を使用しているシステムがなければしっくりとこないだろう。利用されている代表的なシステムはFeliCaだ。通信速度とレスポンスの高さは暗号化を共通鍵暗号方式で行い、共通鍵を相手の公開鍵で暗号化してセットでやり取りするといった手法を取り入れていることも素早い波能速度を実現している要因の一つと言って良い。秘密鍵の扱いも厳重に行われているが、この辺りはセキュリティーに直結するところなので割愛することにしよう。
この記事へのコメント