暗号技術の基礎
CIA
Confidentiality (機密性) | 第三者に盗聴されないように限られた人だけがデータにアクセスできる |
Integrity (完全性) | データを改竄から保護できる |
Availability (可用性) | 必要な時にいつでもアクセスできる |
※トランザクションのACID属性とは違います。
暗号方式
暗号技術は「鍵」と「アルゴリズム(ルール)」によって成り立つ。
共通鍵(対象鍵)方式
暗号と複合に同じ鍵を利用する。
AES(AdvancedEncyptionStandard)など。
デメリット
・鍵を安全に共有するコストが大きい
・通信相手が増えると管理する鍵が増えてしまう
公開鍵(非対称鍵)方式
1976に誕生。
暗号と復号に異なる鍵を利用する。
公開鍵は誰でも見れるが、秘密鍵は所有者しか知られないようにする。
口座番号と暗証番号の関係に似ている。
「RSA」「楕円曲線暗号」というアルゴリズムが利用される。
公開鍵暗号方式の仕組み
電子署名
電子署名(正しい送信者からの送信という検証)がないと、TXが改竄されているおそれがある。
秘密鍵が流出していない限り、送信者以外に電子署名はできないので、データの改竄防止が可能になる。
・送信者は「データ」と「データのハッシュを送信者の秘密鍵で暗号化したもの」を送信
・受信者は受信した『「データ」をハッシュ化したもの』と『「データのハッシュを送信者の秘密鍵で暗号化したもの」を送信者の公開鍵で復号化したもの』が一致することをか確認
CAとSSL
CA(認証局)=電子証明書を発行する機関
これは「信任できる第三者(TrustedThirdParty)」。
公開鍵を認証局へ登録申請すると、本人確認が行われ、認証局の秘密鍵で電子署名した電子証明書が発行される。
SSL/TLSもWebサイトの公開鍵を認証局が電子署名することで、正当なWebサイトの運営者ということがわかり、フィッシングサイト対策にもなる。
認証局自体が信頼できるかどうかを確認したい場合は、ルート認証局/中間認証局を確認する必要がある。
※Man In The Middle Attack(中間者攻撃)
A->Bにデータを送る際に、AはBの公開鍵で暗号化するが、実はBの公開鍵がCの公開鍵だった場合、Cが自分の秘密鍵でデータを確認できてしまい、その後に本当のBの公開鍵で暗号化しBに送ると、AもBもそれには気づかない。公開鍵暗号方式はこのような問題がある。
セキュリティ対策
E2EE(EndToEndEncryption)
→自分のブラウザ(もしくはアプリ)でデータを暗号化してからサービス側に送る方式
※パスワード管理の重要性
一部のWebサービスではパスワードを平文で保存している。もしくは古いWebサービスだと弱いハッシュで暗号化されている。
2FA
ログイン認証+セキュリティコードなどによる確認
→Google Authentication/Authy
Google Authenticator
・秘密鍵共有:ユーザ専用の秘密鍵をQRコードで読み取る
・カウンター表示:現在時刻を整数に変換して30秒で割って小数点以下を切り捨てたものを表示する。
・先頭6桁表示:秘密鍵とカウンターでハッシュ関数にかけて表示
・検証:サービス側とユーザは同じ鍵と時計を共有しているためセキュリティコードは一致する。
U2F
専用USBでのユーザ認証。端末内で公開鍵と秘密鍵ノエぱが生成され、サーバ内に公開鍵を登録する。ユーザがボタンをタップすることで電子署名が作成されて、本人確認が行われる。
ウォレット理解
仮想通貨の始め方
・クライアントをDLする
・ブロックチェーンを同期する
・取引所で購入する or 友人から送金してもらう
クライアント
・フルクライアント(コアクライアント、フルノード)
・軽量クライアント
フルノード
機能としては、ウォレット機能、マイナー機能、フルブロックチェーン機能、ルーティング機能を持ち合わせる。
フルブロックチェーン(台帳の完全版)があるので、不正や改竄を検証できる。
ただし、ディスクの空き容量が必要。
2020年3月260GB。
軽量クライアント
機能としては、ウォレット機能、ルーティング機能のみ。
ブロックヘッダのみで、トランザクションは保持しないので、データサイズはフルノードの1/1000程度となる。
他のノードと接続して任意のアドレスへのTXを収集する機能を持つ。
ウォレット
秘密鍵を保管するためのツール。公開鍵から算出されたアドレスがウォレット(ウォレットアドレス)。このアドレスに紐づくUTXOをかき集めることで残高を確認可能。
ウォレットの種類
種類 | 利便性 | 安全性 | 内容 |
Webウォレット | ◎ | △ | 仮想通貨取引所は基本はこれ。ID/PASSで利用できる。 |
ソフトウェアウォレット | ○ | ○ | 仮想通貨開発者が利用。BitcoinCoreが最も利用されている。 |
ハードウォレット | △ | ◎ | 公式ページなどの正規ルートで購入すべき。 |
ペーパーウォレット | △ | ◎ | アドレスと秘密鍵がQRコード形式で印刷されている。大量の仮想通貨や長期の保管に向いている。消失リスクはある。 |
利便性と安全性がトレードオフとなっている。
アドレス
・秘密鍵のウォレットアドレス
・公開鍵のウォレットアドレス
※WIF(Wallet Import Format)
秘密鍵と相互変換性がある
ウォレットアプリケーション
・残高表示
・複数のアドレスを管理可能
アドレスの構造
・1 or 3で始まる
→1の場合、公開鍵をハッシュしたアドレス
→3の場合、アウトプットのロックに使われるスクリプトをハッシュ化した「マルチシグネチャアドレス(MultiSig)」
※Base58で変換されている
・26 – 35文字の英数字
・prefix + entity(payload) + checksum
※Base58
※bech32
prefixはbcで、「Segregated Witness(SegWit)」に対応したアドレス。
マルチシグネチャアドレス(MultiSig)
・複数の署名が必要なアドレス
・複数人の秘密鍵で運用されることを想定。(例えば、社長、顧問弁護士、経理担当者の3人で「2 of 3 MultiSig」)
※M of N MultiSig
秘密鍵N個のうちM個の署名がないと送金できないようにできる
メインネットとテストネット
メインネット | 価値のあるBitcionを送金できる |
テストネット | 開発、実験のためのネットワーク。regtestというモードで他のノードやブロックとは連動せずに利用可能。 |
ホットウォレット・コールドウォレット
ホットウォレット | インターネットに接続されている |
コールドウォレット | ネットワークに「一度も」接続されたことのないウォレット 大量の仮想通貨を運用する場合は、HSM (HardwareSecurityModule)を使って秘密鍵をオンラインにしないようにする必要あり。 |
※HSM
暗号鍵の保護に特化したハードウェア。
内蔵された専用チップに秘密鍵を保存。
外部からどんな指示が送られても電子署名しか返さない。
Trezor、Ledger nanoが人気。
階層的決定性ウォレット(HDウォレット)
ウォレットには多くのアドレスが管理されている。
「決定性ウォレットアドレス」という考え方が用いられている。
乱数から秘密鍵を生成→マスター秘密鍵
マスター秘密鍵とインデックスを組み合わせて秘密鍵と公開鍵、アドレスを生成する。
さらに改良を加えたのが、階層的決定性ウォレット。アルゴリズムはBIP32で提案され、BIP44で定義されている。
BIP=Bitcoin Improvement Propsals