前回に引き続き bitFlyer竹井さんの講演に参加しました。
日時:2017/05/18 (木) 19:30 〜 21:30
場所:ヒカラボ渋谷
■ 講演メモ
本日トピック
暗号方式
● 共通鍵暗号
暗号、復号の鍵が一緒
● 公開鍵暗号
今日のテーマはこちら。 暗号、復号の鍵が別物。
公開鍵で通信を検証、以降は共有鍵で通信
共通鍵は高速、リスキー
公開鍵は低速、堅牢
用途
暗号として(機密性)
電子署名として(真正性)
RSA暗号 1980年代
素因数分解を利用する
素数が2つ必要 https://ja.wikipedia.org/wiki/RSA%E6%9A%97%E5%8F%B7
離散対数問題 Discrete Longrithm Problem(DLP)
RSA暗号の中で使用
暗号化、復号化に使用される
要は… 巨大な素数を2つ用意する 積が条件に合致する対の値を2つ求める
以下、C#プログラム説明
乱数ジェネレータをつくる 2の14乗〜15乗の範囲
大きな数値を生成
最小値、最大値の範囲に収める
素数判定
素数の前提として、2は奇数に揃える
3以上、自身の平方以下の間で、奇数で割り切れなければ素数だ
判定を反復(※今回は愚直に書いたので重い)
GCD
自身で割って、拡張ユークリッド互除法適用 (PowMod xのa乗のnの余りを求める)
呼び出し元実装
long tekito = 10;
long cipher = PowModo(tekito, a,n);
long decrypt = PowModo(tekito, b,n);
※aを秘密鍵、 bを公開鍵とす
cipherが暗号化された値
decryptが復号された元の値 →RSA暗号は100行で書ける。
楕円曲線 y^2 = x^3 + ax + b のような曲線のこと
格子点(x,y ともに整数になる)箇所のみ考える
格子点をpの剰余で考える
cf: Mastering Bitcoin
楕円曲線の構造
加算、減算が出来る
結合法則 P+Q+R=0
単位元(0) 逆元の存在 -P
交換法則
楕円曲線暗号と群構造
P, aPからaを逆算するのは難しい
ベースポイントG
Secp256k1と呼ばれる楕円曲線パラメータ
p = 2^256 - 2^32 -2^9 - …
楕円曲線暗号 EC ElGamal
鍵生成
公開鍵
暗号化
ランダムな整数k
ペアを暗号文にする
復号
暗号文を受け取ったら…
鍵生成
署名
検証
座標の一致をもって正とする
Bitcoinでの使われ方
Mastering Bitcoin
楕円曲線はsecp256k1で固定
ユーザーは1から
Input:送金元
Output:送金先
送信元
電子署名(使いたい)(r, sが定義される)
公開鍵(圧縮した点)
公開鍵のハッシュ(アドレス、16進数でエンコードしたもの)
公開鍵の値が一致してたら決済OK。
文献
■ Q&A
Q:RSA暗号は使われてない?
A:楕円曲線暗号に移行しつつ、計算が軽い。鍵が短い。暗号強度は同等。
BitFlyer 人事:カラサワさん からのインタビュー
元スクエニ、将棋AIの人事 国内最大のビットコイン・ブロックチェーン企業
BitFlyer Bitcoin流通60%(第1位)
ビックカメラ社と提携
積水ハウス社と不動産データをBlockChain化する
現在開発者は20名 C#、JS、…
■ 竹井さんインタビュー
唐)人事通説エンジニア象
山登り型?
目指す場所を突き進むタイプ
濁流下り型?
トラブル対応で実力付けるタイプ
竹)
PGは小学生から RSAは高校のときのコード、JSでやってみよう
暗号にハマる、素数大好き
大学 音楽部、PG離れる、ゲーム機にハマる
3年からコンピュータサイエンス
OS、Network、情報数理、…
※将棋AIの山本一成さん 大学院になってからPGはじめる例もある
院を出た後、未踏事業に。
提案「カレンダー上の予定調整AI」が採択された BitFlyer 生きている経験
ブロックチェーン「Miyabi」
コンピュータをつくるのに似ている
トランザクション、データ構造、ネットワーク最適、P2P、高速化(マルチスレッド、並列)、効率性
コンピュータ基礎体力は大学時のコンピュータ・サイエンスなのかも。
情報アンテナが高い? セキュリティニュースは好きだから。
■ 参考書籍(※大変充実した内容の書籍でした)
「クラウドを支えるこれからの暗号技術」著:光成滋生
■ 音声データ(※55MBあります)