web-dev-qa-db-ja.com

秘密鍵を複数の場所に分散して保護する

秘密鍵ファイルを分割して別の場所に配置しても安全ですか?誰かがキーの一部だけで実際に何かをすることができるということですか?

35
madjack

ファイルを分割するだけでは望ましい効果が得られません(A.Herseanが その答え で説明しているように)。

あなたが探しているのは " Secret Sharing "アルゴリズム、特に-- Shamirの秘密共有アルゴリズム (@ heinrich5991に感謝)で、秘密がN個に分割されていると思います安全に保管するためにさまざまな人に与えられます。シークレットを再構築するには、すべてのN個のピース​​(または一部のバリアントではk個のピース​​)をまとめる必要があります。攻撃者は、すべてのピースがない場合、情報を取得しません。

多くのアプリケーションで使用されていますが、opensslやCAPIで使用できるとは思いません。多くの堅牢なオープンソース実装があります- この質問 を参照してください。ただし、実装がバックドアされないことが信頼できるかどうかを判断するには、いくつかの宿題を行う必要があります。


「マルチパーティ暗号化」の関連概念もあります。複数の人の公開鍵を使って秘密を暗号化し、それらのすべてが復号化に参加する必要がある場合。 SOそれについての踏み板です:

者を含む暗号化と復号化

RSA暗号化を連鎖させることにより、すでに持っているRSA実装のみを使用して、これの貧者バージョンを実行できます。

RSA(key1, RSA(key2, RSA(key3, secret) ) )

3人に暗号化させたいが、そのうち2人だけが復号化のために存在する必要がある場合は、3つのバージョンの暗号文を保存できます。

RSA(key1, RSA(key2, secret) )
RSA(key2, RSA(key3, secret) )
RSA(key1, RSA(key3, secret) )
51
Mike Ounsworth

秘密鍵または秘密鍵は、切り取られることを意図していません。たとえば、誰かが128ビットの対称キーの半分を保持している場合、キーの強度は2で割られませんが、18446744073709551616(=2⁶⁴)減少します。キーの残りの部分は非常に速く壊れる可能性があります。 (CAが使用する)非対称キーについても同様ですが、計算はより複雑です。

だからそれをしないでください。 1つではなく2つ以上のセキュリティで保護する必要があるため、これにより、ソリューションの複雑さが増し、セキュリティが低下します。

38
A. Hersean