情報データの暗号化方法に関するいくつかの謙虚な意見

序文

数日前、学生からこんな質問を受けました。

キーを生成するには、ユーザーが十分なランダム データを収集する必要があります。ユーザーが生成した秘密キーのほとんどは品質が悪い、つまり予測しやすいことがよく知られています。USYD が安全な通信システムを実装しており、大学管理者が各学生に対して Canvas への安全なチャネルを確立したい、つまり大学が各学生と秘密鍵を生成/共有したいとします。一方、大学は 1 つの短い秘密 msk のみを保存したいと考えています。つまり、学生ごとに異なるキーを作成し、それらすべてをサーバーに保存することはオプションではありません。すべての学生を保管せずに各学生の鍵を生成するには、大学は何をすべきでしょうか? 学生が合計 50,000 人いて、大学が 128 ビットのマスター シークレットを 1 つだけ保存したいとします。解決策を簡単に説明します。上記は実際にはキー配布センターの標準機能です。(ヒント: 各学生には一意の公開 SID があります)

たまたま読んだのですが、ある学校では 50,000 人の生徒の情報を保存し、その情報を暗号化して生徒の情報の安全性を確保したいと考えていますが、サーバーが壊れているため、生徒ごとに個別のキーを設定したくないと考えています。は 128 ビット暗号化データのみを保存できるため、要件を満たす条件下で暗号化を実現する方法を尋ねます。

暗号化プロトコルのレビューが私の表現欲求を呼び起こしたので、この記事を作成しました。

この質問に対する答えについては、この記事を読んだ後、誰もが独自の答えを持っているでしょう。

シーン 1

条件と要件

会社 A は、従業員の社内 Web サイトのアカウント パスワードを保存したいと考えています。

分析する

これは非常に一般的な情報暗号化要件であり、現在一般的な方法は非対称情報暗号化テクノロジを使用することです。

達成

従業員のアカウント パスワード (通常は暗号化されたパスワードのみ) は非対称暗号化 (MD5 など) 後に保存され、暗号化された保存情報は復元できません。従業員がログイン要求を送信すると、サーバーは従業員が入力したアカウント パスワードを暗号化します。暗号化された結果を、発行ライブラリに保存されている暗号化情報と照合し、データが同じであれば、ログインは成功したとみなされます。

欠点がある

非対称暗号化後のデータを復元できないことは利点ですが、制限でもあります。暗号化されたデータは復元できないため、この暗号化方式は、通常は暗号化される個人情報など、アクセスおよび表示が必要なデータの暗号化には使用できません。暗号化されたアカウントのパスワードなどの情報のみに使用され、情報が正しいかどうかを判断するだけでよく、情報の内容を判断する必要はありません。

**極端な場合:** 同じアルゴリズムで非対称に暗号化されたデータは一意であり、暗号化されたデータと暗号化アルゴリズムが既知の場合、平文から破棄されるリスクを排除できません。非対称暗号化アルゴリズムのもう 1 つの欠点は、まったく異なる 2 つのデータの暗号化結果が同じになる確率が非常に低く、確率事象としては非常に小さいですが無視できないことです。

シーン2

条件と要件

A 社は、従業員の個人情報を保管し、従業員が個人情報に正常にアクセスできるようにしたいと考えていますが、企業のサーバーの記憶容量は膨大であり、サーバーの使用率は考慮されていません。

分析する

このように豊かで強力な企業が従業員のデータを管理したいと考えた場合、私たちはまだ多くの管理方法を思いつくことができます。

一つを達成する

暗号化プロセス

A 社は独自の秘密鍵 key1 を持ち、従業員 X は独自に秘密鍵 key2 を設定し、従業員 X は暗号化されていない個人情報と key2 を A に送信し、A は暗号化されていない従業員情報を key1 で暗号化して暗号化パッケージを取得し、非対称暗号化アルゴリズムは key2 を key3 に暗号化し、A は key3 と暗号化されたパッケージをサーバーに保存します

復号化プロセス

従業員 X が key2 を入力し、企業 A が非対称暗号化アルゴリズムで key2 を暗号化して key4 を取得し、次に key3 と key4 を比較します。key3=key4 の場合、A は key1 を使用して X に対応する暗号化されたパッケージを復号化し、復号化された X の個人情報を送信します。 X に。

デメリット1

Company A は key3 を保存するために余分なスペースを費やす必要があり、これによりストレージ コストが増加し、データは key1 によって暗号化されます。key1 が漏洩すると、暗号化されたデータ パッケージが廃止された後にすべての従業員情報が漏洩します。

2つを達成する

暗号化プロセス

会社 A は独自の秘密鍵 key1 を持ち、従業員 X が独自に秘密鍵 key2 を設定し、従業員 X が暗号化されていない個人情報と key2 を A に送信し、A は暗号化されていない従業員情報を key2 で暗号化して暗号化パッケージ 1 を取得し、key1 を使用して暗号化します。暗号化パッケージ 1 から暗号化パッケージ 2 を取得し、最後に A が暗号化パッケージ 2 をサーバーに保存します。

復号化プロセス

従業員 X が A 社に個人情報の閲覧要求を送信し、A 社は X に対応する暗号化パッケージ 2 を key1 で復号して暗号化パッケージ 1 を取得し、A は暗号化パッケージ 1 を X に送信し、X は暗号化パッケージ 1 を取得して key2 を入力します。復号化と暗号化 パッケージ 1 は X の個人情報を取得します。

デメリット2

要求者の身元が確認できない場合、他人がXになりすまして暗号化パッケージ1を入手し、暗号化パッケージ1を爆破してXの個人情報を入手する可能性がある。ただし、ここで注意すべき点が 1 つあり、認証がないとはいえ、特定の IP が短時間に複数の従業員から大量のクエリ情報を要求することをサーバーが許可することは不可能であり、ハッカーは少なくとも認証を行う必要があります。従業員 X の基本情報 (従業員番号など) を知っていれば問い合わせが可能ですが、情報を入手するコストも非常に高くなります。

従業員 X 自身が key2 を忘れた場合、パスワードを取得することはできず、個人情報は無効になり、再入力のみが可能になります。

Q&A:

A は、A から A を要求する限り、暗号化されたパッケージ 2 を復号化するため、key1 は何が必要になるでしょうか。

A 社はライブラリから削除され、全従業員の暗号化パッケージ 2 を取得しましたが、key1 が分からないため、ブラストで推測するしかありませんが、暗号化される前の各データは暗号化されているため、このような状況が考えられます。 key1(つまりデータパケット1)は社員独自の秘密鍵key2で暗号化されているため、ハッカーがどのように爆破してもすべてのデータが暗号化されており、爆破が成功したかどうかを判断することはできません。さらに極端な場合、会社 A がライブラリから削除され、key1 も漏洩した場合、ハッカーは key1 を使用してすべてのデータ パケット 2 を復号化し、データ パケット 1 を取得できますが、各データ パケット 1 の暗号化パスワードは独立しているため、ハッカーによる攻撃のコストは非常に高く、情報漏洩による損失を最大限に防ぐことができます。

3つを達成する

暗号化プロセス

A社は独自の秘密鍵key1を持ち、従業員Xは独自に秘密鍵key2を設定し、従業員Xは暗号化されていない個人情報とkey2をA社に送信し、A社は暗号化されていない従業員情報をkey2で暗号化して暗号化パッケージ1を取得し、同時に、 A は、非暗号化対称手段を使用して key2 を key3 に暗号化し、次に key1 を使用して暗号化パッケージ 1 を暗号化し、暗号化パッケージ 2 を取得します。最後に、A は暗号化パッケージ 2 と key3 をサーバーに保存します。

復号化プロセス

従業員 X が key2 を入力し、会社 A が非対称暗号化アルゴリズムで key2 を暗号化して key4 を取得し、次に key3 と key4 を比較します。key3=key4 の場合、A は key1 を使用して X に対応する暗号化パッケージ 2 を復号し、暗号化パッケージ 1 を取得します。 key2 を使用して暗号化されたパッケージを暗号化し、1 が復号化して X の個人情報を取得し、最後に A が X の個人情報を X に送信します。

デメリット3

この方法は、方法 1 と方法 2 の利点を統合しますが、方法 1 と方法 2 の欠点も統合します。

企業 A は、key3 を保管するために追加のスペースを費やす必要があり、保管コストが増加します。

従業員 X 自身が key2 を忘れた場合、パスワードを取得することはできず、個人情報は無効となり、再入力することしかできません。

シーン3

条件と要件

A 社は、従業員が自分の個人情報に通常アクセスできるように、従業員の個人情報を保存したいと考えています。会社のサーバーの品質は低く、ストレージ容量が少なく、サーバーを保守する専門のスタッフがいません (保守者のみが知っています)。メンテナンス作業などの基本情報) を実現しながら、コストも削減したいと考えています。

分析する

このような条件の悪いサーバーに対処する方法は 2 つ考えられます。1 つ目は情報保管の専門会社であるサードパーティの B 社に依頼すること、2 つ目は従業員情報の分散化を実現することです。

ここで特徴コード T という概念を導入します. 特徴コードは実際にはパスワードですが, データの暗号化ではなく本人確認に使用されます. キー key と区別するために特徴コード T と呼ばれます. 。

一つを達成する

暗号化プロセス

会社 A は独自のキー key1 を持ち、信頼できるサードパーティ会社のキー 2 を雇い、従業員 X は独自に機能コード T を設定し、従業員 X は暗号化されていない個人情報と T を A に送信します。A は key1 を使用して暗号化されていない個人情報を送信し、T は暗号化されて A に送信されます。データ パケット 1 を取得し、A がデータ パケット 1 を B に送信し、B が key2 を使用してデータ パケット 1 を暗号化してデータ パケット 2 を取得し、最後に B がデータ パケット 2 を B のサーバーに保存します。

復号化プロセス

従業員 X が特徴コード T1 (特徴コードを確認する必要があるのが X 本人であるかどうかわからないため、混乱を避けるためにここでは T1 としますが、実際には T) を入力し、A はその後 T1 を一時的に保管します。リクエストを受信して​​ B に送信します。 リクエストを受信した後、B は key2 を使用して暗号化パッケージ 2 を復号し、暗号化パッケージ 1 を取得します。その後、B は暗号化パッケージ 1 を A に送信します。A は key1 を使用して暗号化パッケージ 1 を復号し、X の個人情報を取得します。情報と機能コード T2 を送信し、A が T1 を送信します。T2 と比較して、T1=T2 の場合、A は X の個人情報を X に送信します。

デメリット1

企業 A は、リクエストの時点ではリクエスト者の身元を確認せず、企業 B とのデータやり取りが完了した後にのみ確認します。ハッカーが悪意を持って複数のリクエストを送信すると、サーバーの負荷が増加します。

B 社は A 社を認証していないため、B 社が暗号化パッケージ 1 を A を偽ったハッカーに直接送信する危険性があります。

2つを達成する

暗号化プロセス

会社 A は独自のキー 1 を持ち、雇用されている信頼できるサードパーティ企業も独自のキー 2 を持っています。従業員 X は独自に機能コード T1 を設定します。従業員 X は暗号化されていない個人情報と T1 を A に送信し、A は key1 を使用して暗号化されていない個人情報を A に暗号化します。データ パケット 1 を取得し、同時に A は非対称暗号化アルゴリズムを使用して T1 を暗号化し、T2 を取得して A のサーバーに保存します。その後、A はデータ パケット 1 を B に送信し、B は key2 を使用してデータを送信します。 パッケージ 1 は暗号化されますデータ パッケージ 2 を取得し、最後に B はデータ パッケージ 2 を B のサーバーに保存します。

復号化プロセス

従業員 X が特性コード T1 を入力し、A がリクエストを受信し、T1 を使用して非対称暗号化アルゴリズムを使用して T3 を取得します。T2=T3 の場合、A は B にリクエストを送信し、B は受信後に key2 を使用してデータ パケット 2 を復号します。データ パケット 1 を取得し、データ パケット 1 を A に送信するという要求。A は key1 を使用してデータ パケット 1 を復号し、x の個人情報を取得し、最後に A は個人情報を X に送信します。

デメリット2

これにより、A 社のサーバーのストレージ コストが増加しますが、従業員の個人情報を直接保存するよりもはるかに優れています。

B社がA社の認証を行っていないことは未解決であり、B社がA社を騙ったハッカーに暗号化パッケージ1を直接送信する危険性がある。

3つを達成する

暗号化プロセス

暗号化前の準備: A 社は独自の機能コード T0 を持ち、A 社は T0 を B 社に送信し、B 社は key2 を使用して T0 を暗号化し、暗号化パッケージ 01 を取得します。次に、非対称暗号化アルゴリズムを使用して T0 を暗号化して T01 を取得し、最後に B を取得します。パッケージ 01 を暗号化して A に返します。A は key1 を使用して暗号化パッケージ 01 を暗号化し、暗号化パッケージ 02 を取得します。最後に、A は暗号化パッケージ 02 を自身のサーバーに保存します。

会社 A は独自のキー 1 を持ち、雇用されている信頼できるサードパーティ企業も独自のキー 2 を持っています。従業員 X は独自に機能コード T1 を設定します。従業員 X は暗号化されていない個人情報と T1 を A に送信し、A は key1 を使用して暗号化されていない個人情報を A に暗号化します。データ パケット 1 を取得し、同時に A は非対称暗号化アルゴリズムを使用して T1 を暗号化し、T2 を取得して A のサーバーに保存します。その後、A はデータ パケット 1 を B に送信し、B は key2 を使用してデータを送信します。 パッケージ 1 は暗号化されますデータ パッケージ 2 を取得し、最後に B はデータ パッケージ 2 を B のサーバーに保存します。

Q&A:

A がデータ パケット 01 を保存する前に暗号化する必要があるのはなぜですか?

A が暗号化パッケージ 01 を key1 で暗号化するのは、「すべての卵を 1 つのカゴに盛るな」の原則に従うためです。リスクを軽減するために、Key1 と暗号化パッケージ 02 は別々に保存する必要があります。A がパッケージを暗号化しないとします。 01は暗号化され、暗号化パッケージ01が保存されているため、ハッカーが暗号化パッケージ01の窃取に成功すると、ハッカーはA社を迂回してA社になりすましてB社に直接データを要求することができます。

A 社の非暗号化フィーチャー コード T0 が暗号化パッケージ 02 に格納されているのに対し、B 社は非対称暗号化された T01 を格納しているのはなぜですか?

ここには実際に論争がありますが、それぞれに独自の理由があります。暗号化パッケージ 01 は key2 で暗号化されているため、T0 を直接保存すれば十分であるという見方もあります。T0 が盗まれたとしても、ハッカーは偽造するために key2 を盗む必要があります。対称暗号化では手順が複雑になりますが、別の観点からは、非対称暗号化を使用すると、ハッカーが暗号化パッケージ 01 を偽造する可能性を基本的に排除できるということになります。これら 2 つは効率性とセキュリティのそれぞれに一長一短があり、非対称暗号化を使用するかどうかは任意です。

復号化プロセス

従業員 X が特性コード T1 を入力し、A がリクエストを受け取り、T1 を使用して非対称暗号化アルゴリズムを使用して T3 を取得します。T2=T3 の場合、A は key1 を使用して暗号化パッケージ 02 を復号して 01 を取得し、A は暗号化パッケージ 01 を送信します。 B に対して、B は key2 を使用して暗号化パケット 0 を復号して T02 を取得し、次に非対称暗号化アルゴリズムを使用して T03 を取得します。T01=T03 の場合、key2 を使用してデータ パケット 2 を復号してデータ パケット 1 を取得し、データ パケット 1 を送信します。 A は key1 を使用してデータ パケット 1 を復号化し、x の個人情報を取得し、最後に A はその個人情報を X に送信します。

デメリット3

A 社のサーバーのストレージ コストは増加しましたが、全体のコストと A 社のサーバーの需要は十分に低いレベルまで削減されました。

4つを達成する

暗号化プロセス

暗号化前の準備: A 社は、サーバー内で領域 A1 と領域 A2 の 2 つの領域に分割しています。A1 と A2 のデータ ストレージは互いに分離されており、相互にデータの転送のみが可能です。A1 には独自の鍵 key1 があり、A2 には独自の鍵 key1 があります。独自キー key2 、 A1 は、従業員 X が情報をアップロードする際に、固有の特徴コード T を自動生成する機能を持っています。

従業員 X が暗号化されていない個人情報を A1 に送信します。A1 は機能コード T を生成し、key1 を使用して暗号化されていない個人情報を暗号化し、T を使用して暗号化されたパッケージ 1 を取得します。A1 は暗号化されたパッケージ 1 と T を A2 に送信します。A2 は key2 を使用してパッケージ 1 と T を暗号化します。を暗号化して暗号化パッケージ 2 を取得し、A2 は暗号化パッケージ 2 を A1 に送信します。A1 は key1 を使用して暗号化パッケージ 2 を暗号化し、T を使用して暗号化パッケージ 3 を取得します。最後に、A1 は暗号化パッケージ 3 を X に送信します。これは X 自身によって保存されます。

復号化プロセス

従業員 X が暗号化パッケージ 3 を A1 に送信し、A1 は暗号化パッケージ 3 を key1 で復号し、暗号化パッケージ 2 と機能コード T1 を取得します(X 本人であるかどうか未確認のため、実際には T1 であると仮定します)。 T)、A1 が T1 を送信します。暗号化パッケージ 2 と一緒に A2 に送信します。A2 は、key2 で暗号化パッケージ 2 を復号化し、暗号化パッケージ 1 と機能コード T2 を取得します。次に、A2 が T1 と T2 を比較します。T1=T2 の場合、B は暗号化パッケージを送信します。 1と特徴コードT2をA1に入力すると、A1は暗号化パケット1をkey1で復号してXの暗号化されていない個人情報を取得し、T3、T3=T2であればXが本人であると判断し、Xの暗号化されていないデータをXに送信する。

デメリット4

欠点は明らかで、暗号化パッケージ 3 が盗まれると、従業員 X の個人情報が漏洩してしまいます。

私はこの方法を「分散型情報保管」と呼んでいますが、企業のサーバーは計算と検証作業のみを担い、個人情報は個人に分散して保管される方法です。

この致命的な欠陥には多くの解決策があります。

① 暗号化する際、従業員 X が自分で鍵 key3 を設定し、暗号化の最終段階で A1 が key3 を使用して暗号化パッケージ 2 を暗号化し、機能コード T を使用して暗号化パッケージ 3 を生成します。

② 暗号化する場合、従業員 X が自分で機能コード TX を設定し、A1 が機能コード T を生成し、key1 を使用して暗号化されていない個人情報を暗号化して TX を使用して暗号化されたパッケージ 1 を取得し、A1 が暗号化されたパッケージ 1 と T を A2 に送信し、A2 が key2 を使用して暗号化します。パッケージ 1 と T は暗号化されて暗号化パッケージ 2 を取得し、A2 は暗号化パッケージ 2 を A1 に送信します。A1 は key1 を使用して暗号化パッケージ 2 を暗号化し、T を使用して暗号化パッケージ 3 を取得します。最後に、A1 は暗号化パッケージ 3 を X に送信します。 X自身。

③ 暗号化する場合、従業員 X が多目的コード D を自ら設定し、A1 が機能コード T を生成して key1 を使用して暗号化されていない個人情報を暗号化し、D が暗号化パッケージ 1 を取得し、A1 が暗号化パッケージ 1 と T を A2 に送信し、A2 が暗号化パッケージ 1 を取得します。 key2 を使用してパッケージ 1 を暗号化し、T を暗号化して暗号化パッケージ 2 を取得します。A2 は暗号化パッケージ 2 を A1 に送信します。A1 は D を使用して暗号化パッケージ 2 を暗号化し、T を使用して暗号化パッケージ 3 を取得します。最後に、A1 は暗号化パッケージ 3 を X に送信します。 X 自身が保管しています。

これら 3 つの方法の復号化プロセスは繰り返されないため、ご自身で理解していただく必要がありますが、これら 3 つの方法は実際には効率とセキュリティの点でトレードオフになるため、どちらが優れていてどちらが劣っているかを正確に定義することはできません。

この方法のもう 1 つの欠点は、従業員 X 自身が暗号化パッケージ 3 を紛失した場合、個人情報が完全に失われ、再入力することしかできないことです。

要約する

非常に多くの実装方法を読んだ後、実際のいわゆる最適な方法は存在せず、誰もがセキュリティと効率の間でトレードオフを行う必要があることがわかります。また、いずれの方法を使用する場合でも、社員が自らパスワード(署名コード/キー/暗号化パッケージ)を漏洩すると個人情報の漏洩に繋がることが分かりますので、重要なパスワードには十分注意してください。平時は公開しないことが最大のセキュリティ保証ですが、暗号化ロジックがどれほど巧妙で厳密であっても、「インナーゴースト」を防ぐことはできません。

情報データの暗号化も、高い確率でセキュリティの一種です。世の中に絶対的なセキュリティはありません。ハッカーがハードルを上げると、ハッカーはすべてのキーと署名 T を同時に削除することに成功し、爆発する可能性があります。結果として、非対称暗号化はすべて無効になります。

おすすめ

転載: blog.csdn.net/weixin_46706771/article/details/123604145