10,000人の加入者にブロードキャストするために暗号化したいストリームがあります。対称キーを使用してこのデータを暗号化する必要があることはわかっています。また、この対称鍵は30日ごとにローテーションされる予定です。
各サブスクライバーの公開キー(それらだけが知っている秘密キー)を既に持っていると仮定すると、対称キーを暗号化してサブスクライバーに送信するにはどうすればよいですか?
それともこれは明白です。各公開鍵で対称鍵を暗号化するだけですか?特別な考慮事項はありますか?
たとえば、対称キーの長さはソリューションにどのように組み込まれますか?対称キーをSOAPまたはJSONメッセージでラップすることを検討しています。これにより、暗号化される最終的な文字列の長さが変わる可能性があります。
各受信者の公開鍵で対称を暗号化するだけです。それよりも良い方法についてはいくつかの調査があります(そのため、サイズのオーバーヘッドは、たとえば、受信者あたり100バイト未満になります)が、現在直接適用できるものはありません。
RSA(最も可能性が高い)を使用する場合、サイズは次のとおりです。暗号化されたメッセージのサイズは常に係数と同じです。 1024ビットのRSA鍵の場合、これは128バイトを意味します。暗号化プロセスには、少なくとも11バイトの内部オーバーヘッドを追加するいくつかのパディングが含まれます。したがって、1024ビットのRSA鍵で暗号化されるデータBLOBの最大サイズは128-11 = 117バイトです。
対称キーをSOAPまたはJSONメッセージでラップする理由がわかりません。暗号化されている場合、受信者はそれを復号化する必要があります。暗号化されたRSAメッセージは本当に束のように見えるため目に見える構造のないランダムなバイトの場合、これは受信者が何を期待するかをすでに知っていることを意味します。その時点でSOAPまたはJSONは何を追加しますか?逆にそれを実行したい場合があります。つまり、対称キーを(RSAで)暗号化し、次にresult(128バイトの暗号化されたメッセージ)をSOAPまたはJSONメッセージにラップしますか?
いくつかの使用可能なBroadcast Encryption(BE)スキームがあります。それらの中で最も人気があるのは、提案されたNaor-Naor-Lotspiech(NNL)によるSubset Difference(SD)スキームです。これは、スキームを説明する論文の完全版へのリンクです: http://eccc.hpi-web.de/report/2002/043/ 。光ディスクのデジタル著作権管理のための[〜#〜] aacs [〜#〜]標準での使用が提案されました。
BEスキームの(コストの観点から)最も重要な2つのパラメーターは、(a)各ユーザーの秘密鍵を保存するために必要なstorageの量、(b)量です。ブロードキャスト用に暗号化されるデータの各ブロックとともに送信する必要がある追加情報(通信オーバーヘッド)。
デバイスキーのストレージ要件と通信のオーバーヘッドを削減することを目的とした、NNL-SDスキームに対するいくつかの改善が提案されています。それらのいくつかを以下に示します。
これらのスキームにはすべて次の機能があります。A.statelessであるため、ユーザーキーを時々更新する必要はありません。 B.これらのスキームでは、任意の時点で任意の数のユーザーを取り消すこともできます。 C.「black-box traitor tracing」も許可します。これは、「海賊解読ボックス」の解読機能をテストして、その中で使用されているユーザーキーを見つけることができるメカニズムです。これは、海賊箱を開ける必要がないことに留意されたい。ブラックボックスとして扱うことにより、その復号化機能をテストすることで十分です。
ただし、次の欠点があります。A.すべてのブロードキャストは、ユーザーの秘密鍵に関するすべての情報を持っている1つのセンターから行われます-BEの標準定義に従って。 B.ユーザーはシステムに動的に追加できません。したがって、システム内のユーザーの最大数を推定し、スキームの初期化中に固定する必要があります。