2012-03-26 8 views
2

小さなシリアル化されたデータ構造(〜256バイト)を暗号化して、(特にURLの)安全に渡すことができます。私の現在のアプローチは、対称ブロック暗号を使用し、次に64エンコードをベースにし、次に暗号テキストをURLエンコードします。これにより、元のデータ構造よりかなり長い符号化された暗号テキストが生成されます。これらのコード化された暗号の長さは、ユーザビリティの問題のビットです。理想的には、暗号テキストを入力テキストと同じ長さにしたいと思います。暗号化されていないURL安全な暗号文を生成する暗号

出力バイトの値をURLセーフ範囲に制限するように設定できるブロック暗号がありますか?もしあればセキュリティトレードオフが関係すると私は想定している。

答えて

2

与えられた鍵Kに対して、暗号は平文ごとに異なる暗号文を生成する必要があります。メッセージスペースが256バイトの場合、暗号は少なくとも256^256の異なるメッセージを生成できなければなりません。これには少なくとも256バイトが必要で、出力アルファベットのサイズを小さくするとメッセージが長くなります。

これまで見てきたように、特定の出力シンボルを避けるために、後でエンコードを行うことができます。さらに、エンコーディングが適切な暗号化アルゴリズムの一部であった場合、同じコストを支払うことになります。そのため、これは暗号化アルゴリズムの特徴ではありません。

他にも言及したように、唯一の真の答えは、暗号化するデータのサイズを減らして、より少ないデータをエンコードする必要があることです。 (データをURLに入れたり、データをデータベースに格納したり、URLにユニークなIDを入れるなどの方法があります。したがって、compress> encrypt> encodeを実行します。

+0

これはまさに私が提案しようとしていたものです。データサーバー側を格納し、そのレコードをデータベースに識別するsha1ハッシュのようなハッシュトークンを渡します。次に、base64でエンコードまたはURLエンコードする必要のない40文字の英数字のみを扱います。エンコードされたデータをすべてのサイト訪問者に公開することなく、簡単に、安全に、安全に自分のサーバーからデータを引き出して参照できますハッカーにあなたの暗号化を破り、あなたのサイトを壊すように頼む。 – Brian

1

64文字のうち62文字を変更する必要がないため、URLエンコードではBase64でエンコードされた文字列は大幅に拡張されません。ただし、modified base64 encodingを使用すると少し上手くいくことができます。このエンコーディングは、 '+'と '/'文字の代わりに ' - 'と '_'文字を使用して、わずかな効率向上をもたらします。

暗号自体は重要なデータ拡張を引き起こしていません。ブロック長の倍数になるようにデータを埋め込みますが、それはあなたの場合は重要ではありません。暗号化する前に入力を圧縮してみてください。 256バイトはそれほど多くはありませんが、改善が見られるかもしれません。

1

データ構造が256バイトの場合、8バイトのブロック暗号で暗号化すると、コンクリート入力の長さに応じて8バイトまで増加します。

したがって、base64を適用する前に、base64エンコーディングで最大352バイト増加した最大264バイトがあります。

したがって、最もオーバーヘッドがわかるように、base64エンコーディングによって作成されます。 base91のように少しだけ有効なエンコーディングがありますが、それはまれです。

サイズが重要な場合は、データを暗号化してから暗号化することをおすすめします。

関連する問題