公開鍵暗号をわかりやすく使えるようにする
共通鍵暗号も扱ってるけど、ここではいったん公開鍵だけ扱うかsta.icon
D&Dだけで実現したい言うてる
誰かのインクでデータを塗り潰したり、魔法のインク消しでインクを見えなくするようなイメージを考える
公開鍵暗号アルゴリズムを使って手軽に秘密データをやりとりできるサービス
サンタの文脈で、
プレゼントをデプロイするので公開鍵の設定を事前にお願いします
俺も考えてみたいsta.icon
公開鍵のコンセプトをまずは分解する
自分が鍵ペアをつくる
秘密鍵
公開鍵
自分の公開鍵を公開する
「俺とやりとりしたい人は、俺の公開鍵を使って暗号化して送ってこい」
(公開鍵Aで暗号化されたデータは、Aの秘密鍵でないと復号できない)
(Aの秘密鍵を持っているのは自分だけなので、事実上自分しか復号できない)
(復号ロジックはいわゆる素因数分解の計算力に頼っている。今のところ問題はないが、量子コンピューティング?で今後計算力激増すると破られる可能性。そしてhttps始め、今の通信はこのロジックに頼ってるので、破られたら世界が終わるンゴ)
必要なアクション
自分(データもらうの待ち)
鍵ペアをつくる
公開鍵を公開
自分に届いた「公開鍵で暗号化されたデータ」を、秘密鍵を使って復号
相手(誰かにデータ送りたい)
相手の公開鍵をゲット
相手の公開鍵を使ってデータ暗号化
相手に送る
1
魔法
合言葉
とりあえず公開鍵の公開や利用といった部分は丸ごと隠蔽していい
鍵、はそれはそれでわかりやすいメタファー
何かを開けるために必要
この路線かなぁ?
「公開鍵で暗号化されたデータ」は、「鍵をかけられた箱」みたいなもん
秘密鍵であける
2
新しく箱をつくる
このとき「箱」と「その箱を開ける鍵」がつくられる
「箱」は何個でもつくれる
自分にデータを渡したい人に向けて、「この箱に入れてから俺にくれ」とする
相手は、もらった箱にデータを入れて、「はい入れたよ」と返す
自分は、鍵を使って箱を開ける
---
箱は、開ける鍵を持ってる自分でないと開かない
箱自体の存在は誰かに見られる可能性はあるが、開けられないので問題はない
ただし以下はおこりえる
箱をすり替えられる可能性(これに対処するのがいわゆる「認証局」というやつ)
箱を奪われる可能性(これは通信エラーとかで起こる)
---
問題は、公開鍵渡してそれ使って暗号化する部分の手続きだよな
この箱メタファーだと一切出してない。内部的にどうやって実現する?
なんか基盤システム必要だろこれsta.icon*2
たとえばsta.iconのページはこんなの?
https://gyazo.com/642eddfe747824d243f5d01cec87a7fb
で、訪問者が「この箱を使う」ボタンを押したら、裏で公開鍵が使われる
※URLはダミー
3
いや、郵便ポストの方がたぶんわかりやすい
吉良野すたのデジタルポスト
sta.icon
汎用(基本的にこちらに入れて下さい。私しか中身は見れません)
案件X用(案件Xの人はこちらをお使い下さい。私以外にもXの関係者が見ることがあります)
で、吉良野すたに秘密データ送りたい人は、汎用なりX用なりに入れればいい
---
が、実装がなぁ
暗号化処理はローカルで行う必要があるんだよ
---
「包装」という概念を入れようか
デジタルポストに入れる前に、そのデータを包装する必要がある
で、この包装はデスクトップアプリまたはコマンドとして提供すればいい
すると、こうなるのか?(ポストじゃなくて箱のままだけど
https://gyazo.com/0a0db263518753eb46defeb717d55e07
1: データ送りたい人はまず包装を入手する
これでローカルのアプリやコマンドに包装がダウンロードされる(実際は公開鍵)
2: 包装する
アプリやコマンドを使う(公開鍵暗号で暗号化する)
3: 包装したデータをポストに入れる
もう暗号化は済んでいるので、実質暗号化したデータをアップロードするだけ
箱管理する側
1: デジタルポストの画面またはアプリやコマンドから箱をつくる
このとき秘密鍵と公開鍵のペアが生成される
後者はデジタルポストのサーバー側に保存される
前者はローカルに保存される・させる
2: 箱にデータが届いた場合、「包装を解除する」をする
これで対応する秘密鍵が自動的に使われる
どうやるんだ?
Web Serviceの画面から、ローカル側の秘密鍵にリーチして暗号化解除処理する必要あるわけですけども
お、いい感じじゃない?sta.icon*2
公開鍵暗号を言葉遊びしてるだけって感じだけど……
でも言葉を舐めちゃいかんね
包装というメタファーを使うだけで、一般人にもだいぶ優しくなるはずだsta.icon
4
デジタルポストもうちょい深堀り
たぶんポストをURLにした方がいい
で、そのポストを見れる人(秘密鍵持ってる人)を表示する?
包装の部分がまだ甘いよな
この人のこのデジタルポスト限定の包装 ← 実質こんな概念がある
が、こんなの一般人には難しすぎる(現実世界でこれを表現している物がない(のでイメージできない))
「まあなんか包装という処理をするんだよ」くらいにごまかした方がいいのかもしれないsta.icon
5
そうか、既にツールとしてつくってるのか
たぶんsta.iconが考えてることは全部通ってる気がする
あとで見てみる
https://gyazo.com/5eb7b805d0c4e109ce38da5314f44d9a
enigmizeで
キーペア
公開鍵の保存
urlにメアドを与えることで識別
ファイルはD&Dする
メール送信もやってくれる
npmでmailライブラリがあるみたい
nodemailer?