FUJILOG

見た、聴いた、触れたこと。 動かしたもの、書いたもの。 ウェブとリアルの備忘録です。

参加録「bitFlyerエンジニアと一緒にC#で書いて学ぶ暗号入門」

前回に引き続き bitFlyer竹井さんの講演に参加しました。 

 

日時:2017/05/18 (木) 19:30 〜 21:30

場所:ヒカラボ渋谷

career.levtech.jp

 

SlideShare

www.slideshare.net

 

■ 講演メモ

 

本日トピック

  1. 暗号基本
  2. RSA暗号(※実装平易)
  3. 楕円曲線暗号
  4. Bitcoinトランザクション

暗号方式

共通鍵暗号
 暗号、復号の鍵が一緒

公開鍵暗号
 今日のテーマはこちら。 暗号、復号の鍵が別物。

 

公開鍵で通信を検証、以降は共有鍵で通信

 

共通鍵は高速、リスキー
公開鍵は低速、堅牢

 

用途

 暗号として(機密性)
 電子署名として(真正性)

 

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

  秘密鍵a(スカラー値)

  

  ビットコイン

   Secp256k1と呼ばれる楕円曲線パラメータ

   p = 2^256 - 2^32 -2^9 - …

 

  楕円曲線暗号 EC ElGamal

 

  鍵生成

   秘密鍵

   公開鍵   

  暗号化

   暗号化対象を楕円曲線上の点Mにエンコード

   ランダムな整数k

   ペアを暗号文にする

  復号

   暗号文を受け取ったら…

 

  楕円曲線暗号電子署名(ECDSA)

   鍵生成

   署名

   検証

    座標の一致をもって正とする

 

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、高速化(マルチスレッド、並列)、効率性

 

コンピュータ基礎体力は大学時のコンピュータ・サイエンスなのかも。

情報アンテナが高い? セキュリティニュースは好きだから。

 

 ■ 参考書籍(※大変充実した内容の書籍でした)

クラウドを支えるこれからの暗号技術」著:光成滋生

github.com 

■ 音声データ(※55MBあります)

https://1drv.ms/u/s!AgzxSCFJBEhIoG7E0ty7kXOzTQDv