本稿について
ÆTERNITYのメインネットリリース前から行われているセキュリティ監査報告のv0.5について見ていきます。今回の範囲は「6. Wallet」です。
原文はこちらになります
スポンサードサーチ
今回のまとめ
- ウォレットの設計
- ÆTERNITYが実装を目指すウォレットはiOSやAndroid向けのスマートフォンウォレット(アプリ)。監査対象のウォレットもこのスマートフォンウォレットのリファレンス実装。
- 現時点で実装されているのはアカウントと鍵ペアの管理機能、電子署名の生成機能、ノードのHTTP APIとの通信だけ。ノードとのより高度な通信や存在証明の処理、スマートコントラクト管理機能、ステートチャネル管理機能は未実装。
- また、情報のバリデートも未実装であるのでノードを完全に信用する必要があり、フルノードならともかく、単なるユーザにとってはセキュリティ面でよろしくない。cnlabは、ウォレットとノード間の高度なインタラクティブ機能をすぐに実装するよう推奨する。
- ウォレットの実装
- 行ったレビュー:ベースウォレットを対象として暗号の使用方法に焦点を当ててソースコードレビューを実施
- 強み:公開鍵暗号の利用(ウォレットの鍵とトランザクションの処理用)については問題点なし。
- 弱み:ウォレット鍵の暗号化に用いるパスワードが満たすべき要件がないためブルートフォースアタックで突破される可能性あり、AES-CTRモードを利用していてMACを計算しないので単純なXOR演算でデータを改変可能。
※以下、今回まとめた範囲の和訳になりますので詳細をご覧になりたい方は読み進めてください。
6. ウォレット
ウォレットはユーザのアカウントとアドレスだけでなく、関連する全ての秘密鍵を管理するエンドユーザのツールである。現在のプロジェクトのビジョンでは、典型的なウォレットはiOSやAndroidのスマートフォンアプリとなるだろう。現在のウォレットのリファレンス実装はこのようなアプリを実装したものである。
長期的には多様なウォレットが考えうる。ÆTERNITYプロジェクト自体かあるいはサードパーティが、ユーザのブラウザで動くウェブアプリケーションやTrezorに相当するようなハードウェアトークン等としてウォレットを実装する可能性がある。
6.1 設計
プロジェクトの現況では、予定しているウォレット機能のうちのごく限られた数だけがリファレンス実装のウォレットアプリに実装されている。
現時点で実装されているもの:
- アカウント、公開鍵、秘密鍵の管理
- 電子署名の生成(例えばトランザクション用など)
- ノードのHTTP APIとの単純な通信
まだ実装されていないもの:
- ノードとの高度な通信
- ノードにより提供された存在証明の処理
- スマートコントラクト管理機能
- ステートチャネル管理機能
現行のウォレットの実装はノードが提供する一切の情報をバリデートしない点は重要であるので付け加えておく。従って、ウォレットはノードを完全に信用する必要がある。
これはÆTERNITYのユーザが自身のフルノードを運営するような設定では許容できる。しかし長期的に見て、自身のノードを運営しないユーザの体験を向上するためにさらなるセキュリティ機能を実装することを推奨する。
推奨案8:cnlabは、ウォレットとノード間の高度なインタラクティブ機能をすぐに実装するよう推奨する。
6.2 実装
ソースコードレビューは"ベースウォレット"に対して行われた。このレビューは暗号ルーチンの使用法に焦点を当てている。これにはウォレットの鍵とトランザクションの処理のための公開鍵暗号の使用法と、アプリに保存されている鍵を保護するための暗号の使用法の両方が含まれる。
強み
- 公開鍵暗号の利用について問題点は見つからなかった。
弱み
- ベースアプリではウォレットの鍵はユーザのパスワードに由来する鍵で暗号化されている。パスワードについて強制される最低限の要件がない。このベースアプリはPWA(プログレッシブウェブアプリ)であるので、追加的な保護(ハードウェアキーストアなど)は用いられていない。攻撃者が単純なパスワードでブルートフォースアタックを行う危険性がある。(Finding101)
- このベースウォレットはAES-CTRモードを使って秘密のデータを保存している。このモードはストリーム暗号と似た特性を持つ。データについてMACは計算されないので、攻撃者は(鍵について何も知らなくても)単に暗号文に改変するための文字列をXOR演算するだけで選択的にデータを変更できてしまう。(Finding103)
(ÆTERNITYのセキュリティ監査報告を読んでみる11 ←← 前)|(次 →→ ÆTERNITYのセキュリティ監査報告を読んでみる13(終))
免責
邦訳には誤りがある場合がございます。予めご承知おき下さい。
確実な情報を知るためには冒頭に示した原文をご参照くださいますようお願いいたします。