MemGuard
メモリ内の機密情報を保存するためのソフトウェアエンクレーブ。
このパッケージは、機密データがメモリ上に露出する可能性を低減することを目的としています。主要なオペレーティングシステムすべてをサポートするよう設計されており、純粋なGoで記述されています。
機能
- 機密データはメモリ上でXSalsa20Poly1305により暗号化および認証されます。使用されている方式はコールドブート攻撃に対しても防御します。
- メモリ割り当てはシステムコールを使用してカーネルに直接リソースを要求することで、言語ランタイムをバイパスします。これによりガベージコレクタの干渉を回避します。
- 平文データを保存するバッファはガードページとカナリア値で強化され、不正なアクセスやオーバーフローを検出します。
- 機密データがディスクに触れるのを防ぐための努力が払われています。これには、スワップを防ぐためのメモリのロックや、コアダンプの処理が含まれます。
- カーネルレベルの不変性が実装されており、保護領域の変更を試みるとアクセス違反が発生します。
- セッションのパージや安全な終了機能、および残存データが残らないようにするためのシグナル処理を提供する複数のエンドポイントがあります。
- データのコピーと比較が定数時間で行われるようにすることで、サイドチャネル攻撃を緩和します。
一部の機能はlibsodiumに触発されています。クレジットは彼らに。
完全なドキュメントとAPIの完全な概要はこちらでご覧いただけます。興味深く有用なコードサンプルはexamplesサブパッケージにあります。
インストール
$ go get github.com/awnumar/memguard
APIは実験的であり、不安定な変更が加えられる可能性があります。バージョンを固定することをお勧めします。[モジュール]
貢献
./examplesへのプログラムサンプルの提出。
- バグ、脆弱性、およびAPI使用上の困難さの報告。
- memguardを活用した有用なセキュリティおよび暗号ライブラリの作成。
- カーネル固有/CPU固有の保護の実装。
- パフォーマンス改善の提出。
Issueはバグの報告や提案の議論のためのものです。プルリクエストはmasterブランチに対して行ってください。