撮影場所 網干なぎさ公園@兵庫県姫路市
姫路市屈指の工業地帯である網干周辺にて撮影。近代都市感が出ているのでお気に入りの写真です。
バオウです。
本日の仮想通貨クイズをお届けします。
【問題】公開鍵暗号方式について説明していないものを選択せよ。
1. 暗号化と複合に別々の鍵を用いる暗号方式。
2. 相手が複数でも、鍵の管理は1つであるので、管理性が良い。
3. 暗号化と復号化で同じ鍵を用いる暗号方式
4. 鍵のビット長を長くしなければならず、処理時間を要する。
【ヒント】今回は文脈がヒントの塊なので、ノーヒントでいきます!
【回答】3. 暗号化と復号化で同じ鍵を用いる暗号方式
こたえは3.です。これのみが"共通鍵暗号方式"について記載されています。
共通暗号鍵方式はその名の通り、暗号化⇔復号化に用いる鍵に同じものを使用する暗号化方式です。相手毎に固有の鍵を作成しなければならず、あらかじめ安全な方法で鍵を受け渡す必要があるので、限られた相手とのやり取りに向いています。例えば仕事場を例に挙げるとこんな感じでしょうか?
1. 取引先(A)に、捺印された書類を送付する。この際、日付(20180522)+ 取引先名をパスワードとして暗号化してメールに添付して送付する。
2. 先程送付した資料のパスワードとして今日の日付(20180522)をメール 送付する。
3. 取引先にて、暗号化された資料が送付されたパスワードによって開封
される。
この例では、
暗号化に使用したパスワード=復号化に使用したパスワード
となっています。ここで、取引先が取引先(B)に変わったとしましょう。そうした場合、暗号化する為のパスワードは日付(20180522)+Bとなる為、別々の鍵を管理しなければならなくなります。
仮想通貨のように、不特定多数の人とのやりとりには明らかに向いていません。
鍵を変えないと、セキュリティ的にも問題が生じますもんね。もしAとBで同じパスワードのみでやり取りしている事が両社間でばれてしまったら、想像も絶する被害を生み出しかねません。仮に取引先が100, 1000, 10000…と増えてきた場合に、それぞれの為に鍵を管理するなんて億劫で仕方ありません。
そこで不特定多数の人に、情報を公開する際に、簡単な鍵の管理方法があります。それが"公開鍵暗号方式"と呼ばれるものです。
公開鍵暗号方式は、"暗号文を作り出す鍵=秘密鍵"と"暗号文を復号する鍵=公開鍵"の2つの鍵を用います。
ここでの公開鍵とは、閉める専用の鍵、秘密鍵とは開ける専用の鍵というイメージをまずはもってください。
そうすると、送信者と受信者の間で以下のやりとりが可能となります。
1. 送信者は受信者の公開鍵を手に入れる。(公開鍵は容易に入手可能)
2. 送信者は受信者の公開鍵を用いて鍵を閉める(暗号化する)。
3. 送信者から受信者へ施錠された(暗号化された)情報を送信する。
4. 受信者は自分だけがしっている秘密鍵を用いて解錠する(復号する)。
でもこれって、不特定多数の相手に情報送信する時に、鍵の管理が容易ってのはスジが通ってないのではないの?だって、相手(受信者)毎に公開鍵を入手する必要があるのなら、管理数は受信者数と=になるでしょう?
そう思ったあなたは非常に感性が鋭いと思います!私は納得いくまでに時間がかかりました!笑
そんなあなたに朗報です。上記手順において、秘密鍵と公開鍵を全て逆に利用してみましょう。いま、以下手順で暗号化→復号化を実施してみます。
1. 情報を送信者のみが知り得る秘密鍵を用いて暗号化する。
2. 受診者は送信者の公開鍵を用いて、暗号化された情報を復号する。
どうでしょうか。こうする事によって、不特定多数の人に公開する鍵は1つでOKとなりました。
でもこれって、共通鍵暗号化方式とやっている事はかわらないんではないだろうか。。確かに公開鍵は一つで良くなったから管理は容易だけど。。
そんなあなたに更に朗報です。鍵が2つ(公開鍵&秘密鍵)となった事で、できる事があるのです。それが電子署名と呼ばれるものです。電子署名を用いる事で、自分が送った情報が他人によって偽装される事を防ぎます。これが公開鍵暗号方式を用いる事の大きなメリットで、仮想通貨にも採用されている仕組みとなっています。
送信者Aと受信者Bの関係を考えてみましょう。今、データが改竄されていない事を証明する為には、ハッシュ値を比較する事を検討してみます。
Aが保有するデータ"あああ"はハッシュ関数を通じてハッシュ値が出力されます。その後、Aが保有する"秘密鍵"によって暗号化され、"電子署名"として、図中黄色内に示したデータセットが、Bに送信されます。Bに送信されたデータが改竄されたものではないと証明する為に、同梱されていた"公開鍵"を用いて暗号文を復号化処理し、ハッシュ値Aを算出します。また、データ"あああ"をハッシュ関数にかけ、出力されたハッシュ値Bとハッシュ値Aを比較した結果、両者に相違がなければ、それは確実に送信者Aが送信したデータで、かつ改竄や偽造が行われていない正しいデータとなります。
このようにしてセキュリティ面が担保された情報が送信される事になります。
仮想通貨の取引データ等は、このような処理を実施した上でブロックチェーン上に履歴が残されていきます。
ここで注意点があります。セキュリティが担保される為には、守らなければならない事があります。
それが
"秘密鍵を他人に絶対に教えない。どんなに仲の良い知人でも例外ではない"
これです。先程の画像からみても、秘密鍵は一切受信者Bへ漏らしていませんでしたね。一般的に公開鍵は秘密鍵を用いて作成されます。その際、公開鍵から秘密鍵を特定する事は困難となっています。(一方向関数を用いている為)
ここで、秘密鍵が流出してしまった場合、本人しか送信し得ないはずのBTCの送金が、第三者によって実施されてしまう懸念がでてきます。
先程説明した通り、秘密鍵によって暗号化されたハッシュ値と、受信者Bが受信したデータから導き出したハッシュ値が同一である事を利用して、本人が送信した確たる証拠をブロックチェーン上に履歴として記憶していきます。
しかし、秘密鍵の情報が漏れてしまった場合、第三者が勝手に私のウォレットからBTCを送金したとしても、私は送金していなくて不正な取引だとわかっていたとしても、他者からみたときにそれが不正である事を検出する手段はなくなってしまうのです。だって本人が送金したからハッシュ値あってるじゃん!ってなってしまうでしょう?!
だから何があっても、秘密鍵は誰にも教えてはいけません。
これだけは肝に命じておいてください。
さて、長くなりましたが本日のまとめは
・"公開鍵暗号化方式”と"共通鍵暗号化方式"の違い
・"秘密鍵 何があっても 非公開"
以上です!笑
by バオウ\(^o^)/
書いた人 バオウ@twitter
過去記事一覧はこちらから
前回/前々回の記事