Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rippleアドレスについて
Search
Yuki Akiyama
August 29, 2017
0
2.1k
Rippleアドレスについて
Yuki Akiyama
August 29, 2017
Tweet
Share
More Decks by Yuki Akiyama
See All by Yuki Akiyama
ビットコインを支えるインフラについて
you21979
3
3.7k
Bitcoinにおける手数料の考え方
you21979
1
1.2k
トレーディングボットとは
you21979
0
410
Bitcoin x Javascript
you21979
1
410
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
69
11k
Rails Girls Zürich Keynote
gr2m
95
14k
We Have a Design System, Now What?
morganepeng
53
7.7k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Building Applications with DynamoDB
mza
95
6.5k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
700
A designer walks into a library…
pauljervisheath
207
24k
Facilitating Awesome Meetings
lara
54
6.5k
Side Projects
sachag
455
42k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Transcript
Ripple アドレスについて 2017/08/29 ビットコインとか勉強会#10 Yuki Akiyama
自己紹介 ビットバンク株式会社 ビットコインエンジニア Yuki Akiyama (@you21979)
リップルのアドレスといえば? sから始まるシークレットキー(snx9HAm11LEpNVVGe4brEePcb3Bcp) rから始まるリップルアドレス(rNLUx8GJhkHstX3XtC4jLQCzWoRftbhrG5) シークレットキーからリップルアドレスが生成されます
要素技術 リップルのアドレスを求めるのに必要な技術は以下の5つ • secp256k1(楕円曲線) • sha512(ハッシュ) • sha256(ハッシュ) • ripmd160(ハッシュ)
• base58(エンコード) ここでは特にふれません
シークレットキーとリップルアドレスの関係 リップルアドレスをシークレットキーから生成する仕様を知るには アカウントファミリーという実装を知る必要があります シークレットキーから生成する場合はこの仕様を元に作られています 以下は仕様が書かれているWIKI https://wiki.ripple.com/Account_Family
用語 1.シークレットキー(シード) 2.プライベートジェネレータ、パブリックジェネレータ 3.秘密鍵、公開鍵 4.リップルアドレス
シークレットキー リップルでシークレットキーと読んでいるのは乱数のシード値のことです 16byte(128bit)のエントロピー(乱数)にFamilySeed(33=s)識別子をつけてbase58Check でエンコードされます
プライベートジェネレータ シードのハッシュから生成されます (細かい仕様はGenerateRootDeterministicKeyを参照) プライベートジェネレータからは2つのパラメータを生成できます • インデックスに対応した秘密鍵 • パブリックジェネレータ
パブリックジェネレータ プライベートジェネレータの楕円曲線から生成されます (細かい仕様はGenerateRootDeterministicKeyを参照) パブリックジェネレータからは1つのパラメータを生成できます • インデックスに対応した公開鍵
秘密鍵と公開鍵 秘密鍵から楕円曲線で公開鍵を生成できます 公開鍵からリップルアドレスを生成できます アドレスの作成方法はビットコインとほぼ同じです(P2PKH) ほとんど同じなので前の勉強会の資料を参考にするとよいです https://www.slideshare.net/tomohidemurata1/ss-76891213
アドレスのエンコード(BASE58) ビットコインと同じbase58だが変換テーブルが違う。 ビットコインの変換テーブル 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz リップルの変換テーブル rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz
工程のおさらい 以下の組み合わせで生成できます 公開鍵を生成する方法が二通りあります • シードからプライベートジェネレータを生成 • プライベートジェネレータからパブリックジェネレータを生成 • プライベートジェネレータから秘密鍵を生成 •
パブリックジェネレータから公開鍵を生成 • 秘密鍵から公開鍵を生成 • 公開鍵からリップルアドレスを生成
プライベート/パブリックジェネレータ? • ジェネレータにインデックスを与えるとインデックスに対応したキーを得られる • つまり一つのシードから複数のリップルを得られる • ビットコインにも似た仕組みがある! • 階層的決定制ウォレット(BIP32、HDウォレット) 実は以下の記事にまとめてある
http://qiita.com/you21979@github/items/ddcdd4de31fb96c26ad2
リップルでもBIP32 • 実はBIP32を実装しているウォレットがある • Ledger Nano S • ニーモニックからリッピルアドレスを作れる •
概念が変わってしまうのでシークレットキーが存在しない • 既存のシークレットキーを使ったインフラが使えない 興味があれば以下の記事にやり方を書いてます http://qiita.com/you21979@github/items/7ca77dbd6ffe8f001e9c
最後に リップルのアドレスを大量に作る方法を紹介しましたが リップルのアドレスは実はいろいろ制限されています • 20XRPいれてアクティベートしないとならない • 対応したライブラリが公式にない アドレスが無限にあるとレジャーの仕組み上都合が悪い。 1000億XRP /
20XRP = 最大50億アカウント 人類は75億人
ご静聴ありがとうございました 質問など