公開鍵暗号方式 – 公開鍵と秘密鍵の仕組み




どうも高妻です。Twitterでプログラミングのことや暗号通貨のことをつぶやいているのでよかったらフォローしてください。  

公開鍵暗号方式とは?

ビットコインの電子署名やインターネットのSSLに公開鍵暗号方式が使われています。公開鍵暗号方式は1970年代に発明され現在も使用されている信頼ある暗号方式です。

名前からだと公開されている鍵と秘密な鍵という情報しかわかりませんね笑 これだけ見るとすごく難しそうな印象を受けます。

実際、これらの詳細な理論については数学の知識がないとなかなか理解できません。けど、どうやって鍵ができて、どこでどんな風に使われるかは誰でも簡単に理解できます。

今回は数学の理論なしに伝わるように説明したいと思います。

公開鍵と秘密鍵はどこからやってくるのか

まず基本となる2つの鍵がどうやって作られているかについてですが、公開鍵は秘密鍵から作ります。

なので、公開鍵は何回でも作成できるので失くしても問題ありません。じゃあ秘密鍵はどうやって作るのかというと、無作為に数字を選ぶだけです。

しかし、1から10の中から数字を選ぶというような規模ではなくめちゃくちゃ大きな桁数の中から無作為に数字を選ぶということです。

どのくらい大きい数字から選ぶか

どのくらい大きな数字かというと、ビットコインで使われる秘密鍵は0が77個続く大きさ10^77の桁の数字から無作為に選びます。想像もつかない大きさですが、宇宙にある原子の数は10^80個らしいので途方もなく大きな数字ですね。

ここで大事なのがこれだけ大きい数字の中から選ぶので世界中の誰とも同じ数字を選ぶ確率が非常に少ないということです。

これは自分の他に同じ秘密鍵を持つ可能性が限りなく小さいので安全と言えます。

公開鍵はどうやって作るのか

公開鍵は秘密鍵から作ります。どうやって作るのかというとハッシュ関数というものを使います。

ハッシュ関数は任意の入力に対して決まった値を出力してくれます。これは入力する値が同じであれば何度でも同じ出力を得ることができます。

このハッシュ関数に秘密鍵である数字を入力して出力されるものが公開鍵となります。

ハッシュ関数は同じ入力に対して必ず同じ結果を出力するので公開鍵を失くしてもまた作ることができます。

しかし、ハッシュ関数の特徴として出力結果からどんな値が入力されたかを知ることができません。なので、秘密鍵をなくす失くすともう二度と手に入れることができなくなります。

鍵を使った暗号化と復号化

ここから鍵を使った暗号化の話になります。

まず暗号化と復号化についてですが、暗号化とは文章や数字をそのままでは意味のない読めないものに変換することを言い、復号化はその読めなくなったものを元の読める状態に戻すことを言います。

公開鍵暗号方式

この暗号化と復号化はどっちの鍵でもできるのですが1つだけ条件があります。それは、暗号化されたデータは暗号化で使ってない方の鍵でしか復号化できないというものです。

例えば、秘密鍵で暗号化したものは公開鍵でしか復号化できないし、公開鍵で暗号化したものは秘密鍵でしか復号化できません。

これが公開鍵暗号方式になります。一番最初に紹介したSSLはこの公開鍵暗号方式と共通鍵暗号方式の2つを利用して実現されています。

ビットコインアドレス

ビットコインでは公開鍵からビットコインアドレスを生成しています。

秘密鍵はビットコインアドレスに紐づけられたビットコインを自分のものと証明するときに秘密鍵を使っています。

公開鍵暗号方式は現代のセキュリティや仮想通貨の仕組みを知る上でも非常に重要な分野となるのでしっかりと理解しておきましょう。

最後に

最後にブロックチェーンエンジニアって何?どうやったらなれるの?という人向けに書いた下の記事も読んでみてください。

>>ブロックチェーンエンジニアになるには何をすべきか

おすすめ書籍

ビットコインとブロックチェーンの詳細をしっかりと学びたい方にはこちらの書籍が非常におすすめです。ウォレットの仕組み、楕円曲線暗号、P2Pプロトコル、公開鍵暗号などビットコインを支える技術について詳細に解説されています。また、サンプルコードを通して実際に手を動かして学べるので非常に濃い内容となっています。

こちらはブロックチェーンの初学者向けになります。ブロックチェーンの応用例の紹介から基礎的な理論まで分かりやすく図解で解説されています。また、ビットコインやEthereum、HyperLdger Fabricを実際に稼働させてみて動作を理解するためのサンプルコードの解説もあります。

The following two tabs change content below.

高妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です