SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
ビットコインで使われている
暗号の基礎
竹井 悠人
ソフトウェア エンジニア
株式会社 bitFlyer
https://goo.gl/6mVqvb
2017/5/18 ヒカ☆ラボ by レバテック
自己紹介
Yuto Takei
Software Engineer
東京大学 情報理工学系修士(形式検証)
未踏 ‘13 (予定調整の最適化問題)
スタートアップを経て昨年入社
C# / OCaml 大好き
BTC 送金お待ちしております
本日のトピック
● 暗号の基本
● RSA 暗号
● 楕円曲線暗号
● Bitcoin でのトランザクションを見る
暗号の種類
● 共通鍵暗号方式
1 本の鍵で、データの暗号化と復号との両方をするタイプ (AES256 etc.)
● 公開鍵暗号方式 (今日の主人公)
暗号化と復号とで異なる鍵を用いるタイプ (RSA, ECC etc.)
平文 暗号文 平文
平文 暗号文 平文
公開鍵暗号方式
● 2 種類の鍵 : 公開鍵, 秘密鍵
● 2 つの使い方
○ 暗号として (機密性)
○ 電子署名として (真正性)
平文 暗号文 平文
公開鍵 秘密鍵
平文 署名 平文
秘密鍵 公開鍵
RSA 暗号
RSA 暗号
巨大な素因数分解が難しいことを利用する
p, q を巨大な素数とする。
ab = 1 mod (p-1)(q-1) となる a, b の組み合わせがあれば、
任意の x に対して n = pq として
xa
= c (mod n) , cb
= x (mod n)
となることを利用している
離散対数問題
Discrete Logarithm Problem (DLP)
xa
= c (mod n) となる c, x を与えられたときでも、a を求めるのは難しい
直感的には、 logx
c を求めるのが難しいという問題
電子署名などでは、x (平文) と c (署名) が既知で、a は署名者の秘密鍵となる
秘密鍵が求められては困る...
拡張ユークリッドの互助法
最大公約数を求めるユークリッドの互助法の拡張
x, y が与えられたとき、
ax + by = gcd(x,y) となる a, b
を求める方法。
基本的に、通常の GCD で係数を覚えて掛けていくことになる
フェルマーの小定理 / オイラーの定理
フェルマーの小定理 : ap−1
= 1 (mod p) , p は素数
オイラーの定理 : aφ(n)
= 1 (mod n)
暗号化 / 復号の処理を通してみてみると
n = pq
xa
= c (mod n) , cb
= x (mod n)
xab
= x(p-1)(q-1)
= x (mod pq) になるので正しく動作する
楕円曲線暗号
楕円曲線の数理
y2
= x3
+ ax + b の形をした曲線のこと
楕円曲線上の点の世界で加乗算ができる
Wikipedia (Elliptic curve) より
格子点 (x, y) を p の剰余で考える
Mastering Bitcoin, Andreas M. Antonopoulos
図 4-3 より
楕円曲線の群構造
加法で閉じている
P + Q は曲線上の点
結合法則
P + Q + R = O
単位元
O (無限遠点)
逆元の存在 交換法則
- P P + Q = Q + P
Wikipedia (楕円曲線) より
楕円曲線暗号と DLP
楕円上の点 P と整数 a について
P, aP から a を逆算するのはとても難しい
(楕円曲線上の離散対数問題)
これを利用して、あるベース ポイント G を定め、
秘密鍵 a (スカラー値。曲線上の点ではない) を組み合わせる
ただし、いくつかの楕円曲線のパラメータでは、
多項式時間で ECDLP を解く方法が見つかっており、
暗号としては使えない
ビットコインで使われる楕円曲線暗号
Secp256k1 と呼ばれる楕円曲線パラメータ
p = 2256
- 232
- 29
- 28
- 27
- 26
- 24
- 1
の数体 Fp 上で定義された
y2
= x3
+ 7
の楕円曲線について、
G =( 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 ,
483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8 )
をベース ポイントとして利用
楕円曲線暗号の暗号 (EC ElGamal)
1. 鍵生成
a. 秘密鍵 : ランダムな整数 a を選ぶ (0 < a < n, ただし n = min {k | kG = O, k > 0 })
b. 公開鍵 : P = aG (G は楕円曲線上のベース ポイント) となる点
2. 暗号化
a. 暗号化の対象を楕円曲線上の点 M にエンコード (X 座標に入れるなど)
b. ランダムな整数 k を選ぶ (0 < k < n)
c. ペア (rG, M + kP) を暗号文とする
3. 復号
a. 暗号文 (C1
, C2
) を受け取ったら、 C2
- aC1
を計算し、デコードする
楕円曲線暗号の電子署名 (ECDSA)
1. 鍵生成
a. 秘密鍵 : ランダムな整数 a を選ぶ (0 < a < n, ただし n = min {k | kG = O, k > 0 })
b. 公開鍵 : P = aG (G は楕円曲線上のベース ポイント) となる点
2. 署名
a. 署名対象の m をハッシュ化する : h(m)
b. ランダムな整数 k を選び (0 < k < n)、r を kP の X 座標とする
c. s = k-1
(h(m) + ar) mod n として、ペア (r, s) を電子署名とする
3. 検証
a. m, (r, s) から Q = (h(m)/s) G + (r/s) P となる点を計算する
b. Q の X 座標が r と一致すればよい
Bitcoin での使われかた
Bitcoin での鍵
Bitcoin で使われる楕円曲線は secp256k1 で固定
ユーザは、1 から n までの範囲で秘密鍵となる整数 k を選ぶ
Mastering Bitcoin, Andreas M. Antonopoulos
図 4-1 より
実際のトランザクション
https://chainflyer.bitflyer.jp/Transaction/d0f1027f7df61b8004bc688516194f83f6fa263527e046a486267ce9d575acdf
トランザクション中のスクリプトを見る
電子署名 (r, s)
公開鍵 (圧縮した点)
公開鍵のハッシュ (アドレス)
参考
● “Mastering Bitcoin”, Andreas M. Antonopoulos
http://chimera.labs.oreilly.com/books/1234000001802/
● 「クラウドを支えるこれからの暗号技術」光成滋生
https://github.com/herumi/ango/blob/master/ango.pdf
まとめ
● 暗号の基本
○ 暗号方式
○ 暗号 / 電子署名
● RSA 暗号
○ 暗号に用いる数理
○ C# でのコーディング
● 楕円曲線暗号
○ secp256k1
○ ECDSA
○ EC ElGamal
● Bitcoin でのトランザクションを見る

Contenu connexe

Tendances

MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
. .
 

Tendances (20)

RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
スパースモデリング入門
スパースモデリング入門スパースモデリング入門
スパースモデリング入門
 
代数方程式とガロア理論
代数方程式とガロア理論代数方程式とガロア理論
代数方程式とガロア理論
 
ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介
 
主成分分析(Pca)
主成分分析(Pca)主成分分析(Pca)
主成分分析(Pca)
 
ファクター投資と機械学習
ファクター投資と機械学習ファクター投資と機械学習
ファクター投資と機械学習
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
【慶應大学講演】なぜ、博士課程に進学したか?
【慶應大学講演】なぜ、博士課程に進学したか?【慶應大学講演】なぜ、博士課程に進学したか?
【慶應大学講演】なぜ、博士課程に進学したか?
 
学振特別研究員になるために~2024年度申請版
 学振特別研究員になるために~2024年度申請版 学振特別研究員になるために~2024年度申請版
学振特別研究員になるために~2024年度申請版
 
ゲーム木探索技術とコンピュータ将棋への応用
ゲーム木探索技術とコンピュータ将棋への応用ゲーム木探索技術とコンピュータ将棋への応用
ゲーム木探索技術とコンピュータ将棋への応用
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
MCMCサンプルの使い方 ~見る・決める・探す・発生させる~
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
 
統計的因果推論への招待 -因果構造探索を中心に-
統計的因果推論への招待 -因果構造探索を中心に-統計的因果推論への招待 -因果構造探索を中心に-
統計的因果推論への招待 -因果構造探索を中心に-
 
階層モデルの分散パラメータの事前分布について
階層モデルの分散パラメータの事前分布について階層モデルの分散パラメータの事前分布について
階層モデルの分散パラメータの事前分布について
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 

Similaire à ビットコインで使われている暗号の基礎を学ぶ

HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングHaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミング
Kiwamu Okabe
 
『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算
MITSUNARI Shigeo
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
Yosuke Onoue
 
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
MITSUNARI Shigeo
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
 
Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)
Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)
Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)
takesako
 

Similaire à ビットコインで使われている暗号の基礎を学ぶ (20)

準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
 
One time verifiably encrypted signatures a.k.a. adaptor signatures
One time verifiably encrypted signatures a.k.a. adaptor signaturesOne time verifiably encrypted signatures a.k.a. adaptor signatures
One time verifiably encrypted signatures a.k.a. adaptor signatures
 
katagaitaictf7_hw_ysk
katagaitaictf7_hw_yskkatagaitaictf7_hw_ysk
katagaitaictf7_hw_ysk
 
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングHaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミング
 
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
 
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法
 
図解で理解するvetKD
図解で理解するvetKD図解で理解するvetKD
図解で理解するvetKD
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
Python Data-Visualization Package Status
Python Data-Visualization Package StatusPython Data-Visualization Package Status
Python Data-Visualization Package Status
 
『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
20130819 jjugnslt
20130819 jjugnslt20130819 jjugnslt
20130819 jjugnslt
 
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
 
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)
Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)
Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)
 
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
 
PBL1-v1-008j.pptx
PBL1-v1-008j.pptxPBL1-v1-008j.pptx
PBL1-v1-008j.pptx
 

Plus de Yuto Takei

51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション
Yuto Takei
 

Plus de Yuto Takei (20)

51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション
 
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門
 
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
 
開発チームにおける多様性のススメ
開発チームにおける多様性のススメ開発チームにおける多様性のススメ
開発チームにおける多様性のススメ
 
ブロックチェーン神話に迫る - 本当に使える? 使えない?
 ブロックチェーン神話に迫る - 本当に使える? 使えない? ブロックチェーン神話に迫る - 本当に使える? 使えない?
ブロックチェーン神話に迫る - 本当に使える? 使えない?
 
ブロックチェーン技術者が夢見る未来
ブロックチェーン技術者が夢見る未来ブロックチェーン技術者が夢見る未来
ブロックチェーン技術者が夢見る未来
 
ブロックチェーン技術の課題と社会応用
ブロックチェーン技術の課題と社会応用ブロックチェーン技術の課題と社会応用
ブロックチェーン技術の課題と社会応用
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
 
ブロックチェーンの不動産登記への応用に関する検討
ブロックチェーンの不動産登記への応用に関する検討ブロックチェーンの不動産登記への応用に関する検討
ブロックチェーンの不動産登記への応用に関する検討
 
51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション
 
[Intermediate 04] ブロックチェーンの動作原理
[Intermediate 04] ブロックチェーンの動作原理[Intermediate 04] ブロックチェーンの動作原理
[Intermediate 04] ブロックチェーンの動作原理
 
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
 
[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について
 
[Intermediate 01] イントロダクション / Bitcoin を動作させる
[Intermediate 01] イントロダクション / Bitcoin を動作させる[Intermediate 01] イントロダクション / Bitcoin を動作させる
[Intermediate 01] イントロダクション / Bitcoin を動作させる
 
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
 
[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力
 
[Basic 12] 関数型言語 / 型理論
[Basic 12] 関数型言語 / 型理論[Basic 12] 関数型言語 / 型理論
[Basic 12] 関数型言語 / 型理論
 
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
 
[Basic 10] 形式言語 / 字句解析
[Basic 10] 形式言語 / 字句解析[Basic 10] 形式言語 / 字句解析
[Basic 10] 形式言語 / 字句解析
 
[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御[Basic 9] 並列処理 / 排他制御
[Basic 9] 並列処理 / 排他制御
 

ビットコインで使われている暗号の基礎を学ぶ