Share
Embed
暗号通貨の鍵を安全に管理するアーキテクチャを作ってみようとしている話
https://gitpitch.com/cryptofort-sh/cryptofort-presentations
2018/04/20 blockchain-es #1 で発表したスライドです。
GitPitchで作ってPDF化したら想定外にフォントがおかしくなったので、直せたら直してアップし直します。
Hideyuki Takeuchi
April 20, 2018
Transcript
29 slides
-
暗号通貨の鍵を安全に管理する アーキテクチャを 作ってみようとしている話 たけうちさんは縮退しました̀ 2018/04/20 blockchain-es #1 Navigate : Space
/ Arrow Keys | - Menu | - Fullscreen | - Overview | - Blackout | - Speaker | - Help M F O B S ? 1 / 29 -
たけうちさんは縮退しました̀ @chimerast 株式会社ユーザベース 社内ニート (チート系異世界転生志望) ジョブタイプ: 全方位型エンジニア 好きな言語: 今をときめくJava [
GitPitch @ github/cryptofort-sh/cryptofort-presentations ] 3 / 29 -
暗号通貨・ブロックチェーンに 対するスタンス 暗号通貨: あってもいいんじゃないか派 ブロックチェーン: 使い道ないんじゃないか派 (暗号通貨のインフラとしてはOK) [ GitPitch @
github/cryptofort-sh/cryptofort-presentations ] 4 / 29 -
CRYPTOFORT (整備中) (整備中) ステータス: コンセプト検証 言語: TypeScript その他: Terraform(?), Packer
開発体制: 1人, 勉強会駆動開発 ライセンス: Apache License 2.0 https://cryptofort.sh/ https://github.com/cryptofort-sh/ [ GitPitch @ github/cryptofort-sh/cryptofort-presentations ] 10 / 29 -
CRYPTOFORT が提供するもの 暗号通貨サービスのための暗号鍵を扱う仕組み 可能な限り多くの通貨への対応 インターフェースを定義し、 各通貨のモジュールを容易に追加できるように 全ての通貨を同じインターフェースで送金可能に 現状は、通貨毎に違うので非常につらい [ GitPitch
@ github/cryptofort-sh/cryptofort-presentations ] 11 / 29 -
CRYPTOFORT プロジェクト (妄想) CRYPTOFORT-COMMANDER(仮) 送金やスマートコントラクトの実行を 安全に行う仕組み・インフラ定義 CRYPTOFORT-KEYMANAGER(仮) 複数人に権限分散して鍵管理をするための仕組み (≠ マルチシグ)
[ GitPitch @ github/cryptofort-sh/cryptofort-presentations ] 15 / 29 -
どう安全に送金・実行するか? ほとんどの暗号通貨の送金やスマートコントラクトの実行は 複数のフェーズに分割できる 1. 送金や実行命令を出す 2. 命令に署名する 3. 署名した命令をブロードキャストする [
GitPitch @ github/cryptofort-sh/cryptofort-presentations ] 17 / 29 -
どう安全に送金・実行するか? ほとんどの暗号通貨の送金やスマートコントラクトの実行は 複数のフェーズに分割できる 1. 送金や実行命令を出す 2. 命令に署名する (← 暗号鍵が必要なのはここだけ) 3.
署名した命令をブロードキャストする 署名にインターネット接続は必要ない [ GitPitch @ github/cryptofort-sh/cryptofort-presentations ] 18 / 29 -
署名 (ETHEREUM) const EthereumTx = require('ethereumjs-tx') const tx = new
EthereumTx({ nonce: nonce, gasPrice: 5e+9, // 5gwei gasLimit: 31500, to: toAddress, value: value }) tx.sign(privateKey) const serializedTx = '0x' + tx.serialize().toString('hex') console.log(serializedTx) [ GitPitch @ github/cryptofort-sh/cryptofort-presentations ] 19 / 29 -
ブロードキャスト (ETHEREUM) const Web3 = require('web3') const web3 = new
Web3(new Web3.providers.HttpProvider(server)) web3.eth.sendRawTransaction(serializedTx, (err, hash) => { if (!err) { console.log(hash) } else { console.log(err) } }) [ GitPitch @ github/cryptofort-sh/cryptofort-presentations ] 20 / 29 -
キューの中身 (仮) 送金キュー ブロードキャストキュー interface TransferRequest { currencyType: string; //
通貨タイプ receiveAddress: string; // 受け取りアドレス amount: bigint; // 送金量 } interface BroadcastRequest { currencyType: string; // 通貨タイプ transaction: string; // トランザクション } [ GitPitch @ github/cryptofort-sh/cryptofort-presentations ] 22 / 29 -
より高い安全を確保するために 署名サーバは起動したらOSに外からは誰も入れないように全ての口を閉じる 都度 Packer で AMI を作成 SSHだけでなく、可能ならシリアルコンソールの口も 署名時にルールによる検証や人による承認を実装する口をつくる 署名サーバがRDBに確認を行い不正な送金先でないことを確認
一定額以上の送金を一度停止し、人による承認を入れるロジックを入れると か ただ色々と要検討 [ GitPitch @ github/cryptofort-sh/cryptofort-presentations ] 23 / 29 -
暗号鍵にまつわるいろいろな問題 社長だけが鍵にアクセスする権限を持っているとか絶対ダメ 複数人で持った方が社長が狙われる可能性が減る マルチシグはWebサービスだとあまり使いどころがない 複数人で持ち合って承認みたいなのだと意味があるけど、 システムに組み込んじゃうとあまり意味が無い 鍵のパスワードを持っている人が会社辞めたらどうするの スマコンのowner変更とかつらい場合もある [ GitPitch
@ github/cryptofort-sh/cryptofort-presentations ] 25 / 29 -
あるべき暗号鍵管理の姿 複数人のパスワードもしくは物理トークン(ICカード等)がそろわないと暗号鍵を 有効化できないようにする 暗号鍵を有効化するのに可能な人数・組み合わせを管理したい あまり親しくない人同士が複数そろわないと開かない方が良い 取締役は2人いれば開けたいけど、平社員は4人いてほしい 人が辞めたときに無効化をできるようにする [ GitPitch @
github/cryptofort-sh/cryptofort-presentations ] 26 / 29 -
作ろうとしているもの パスワードの組み合わせ運用を簡単にできるようなツール 複数人のパスワードを組み合わせて連結し暗号鍵をさらに暗号化する (鍵の多段運用のスライドを作っていたが途中まで作っていたが、 なぜそうしようと至ったかよくわからなくなったので削除しました) CloudHSM等の鍵を安全に管理するクラウドサービスも組み入れたい 生成時にクリーンな環境で生成する仕組みを組み入れたい [ GitPitch @
github/cryptofort-sh/cryptofort-presentations ] 27 / 29 -
暗号通貨やブロックチェーンやDAppsとかは 鍵の管理を考えるととっても大変 cryptofort 妄想を実現するためにがんばりたい 複数通貨への対応がつらいので誰か手伝って 暗号通貨とかブロックチェーンとかどうでもいいから 「暗号技術入門 第3版 秘密の国のアリス |
結城 浩」 をまず読むんだ! "Recommendation for Key Management" NIST SP 800-57 Part 1, Part 2, Part 3とかも読みたい [ GitPitch @ github/cryptofort-sh/cryptofort-presentations ] 29 / 29