認証子
認証子を使用すると、暗号化されたフィールド全体が外部から置き換えられるのを防ぐことができます。次の給与データの表を例として説明します。
従業員 ID (Employee_ID) |
役職 (Standard_Title) |
基本給 (Base_Pay) |
---|---|---|
345 |
事務アシスタント |
Fskj%7^edhn00 |
697 |
最高財務責任者 |
M0x8900f56543 |
694 |
データ入力主任 |
Cvc97824%^34f |
暗号を破らなくても、暗号文が格納された前後関係からハッカーは重要な情報を推測できます。最高財務責任者は事務アシスタントよりも給与が多いので、"M0x8900f56543" として暗号化された値は、"Fskj%7^edhn00" として暗号化された値よりも大きくなります。この場合、テーブルの ALTER 権限を持つユーザーが、最高財務責任者の Base_Pay フィールドに格納されたデータをコピーして、この事務アシスタントの Base_Pay フィールドと置き換えれば、給与を上げることができます。この、値全体を置き換えてしまう攻撃は、データが暗号化されていても行うことができます。値全体の置き換え攻撃を阻止するには、プレーン テキストを暗号化する前にコンテキスト情報を追加します。このコンテキスト情報を使用すると、プレーン テキストのデータが移動されていないことを検証できます。
データを暗号化するときに認証子のパラメータを指定した場合、データの暗号化を解除するときに同じ認証子が必要になります。暗号化のとき、認証子のハッシュをプレーン テキストと共に暗号化します。暗号化を解除するときには、同じ認証子が暗号化解除関数に渡される必要があります。両者が一致しない場合、値が暗号化の後で移動されたことになるので、暗号化解除は失敗します。認証子には、結果を格納するテーブルの主キーを使用することをお勧めします。