base64エンコーディングには暗号化の意図はありませんが、エンコーディングプロセスを何らかの方法で調整して作成できると考えるのはそれほど難しいことではありません。暗号化。確かに、base64エンコーディングを利用したこのような暗号化の試みを考えたのは私が初めてではありません。したがって、どのような種類のbase64暗号化戦略が知られているのでしょうか?
コメント
- 6ビットストリーム暗号のように?
- 通常、暗号化はデータがBase64を通過する前に行われます
- '以前に使用されたbase64暗号化スキームを見たことがありますが、それらはすべて簡単に実行できます。壊れています。この質問は、人々がこのようなアルゴリズムを検索している可能性があるため、理にかなっています。ただし、常識は、base64が暗号として意図されておらず、暗号化とエンコードを混同した結果であることを示していることを意味している可能性があります。この質問の前提が間違っていること:暗号化にエンコードスキームを使用できること。これは、質問が少なくとも多くの初心者の暗号学者にとって少なくとも興味深い場合でも、反対票を投じる可能性があります。
- おそらく接線方向に関連する: crypto.stackexchange.com/questions/62425/ … 、 crypto.stackexchange.com/questions/5862/ … および crypto.stackexchange。 com / questions / 45215 / …
回答
これは、Base64の Wikiエントリから取得されます:
本当に暗号化を提供するためにBase64エンコーディングを改ざんすることを目的としており、上記で強調表示されているインデックスレベルで実行できます。秘密鍵、つまり鍵導出関数が必要になります。これは、高エントロピーシードを作成するように調整されており、疑似乱数ジェネレーターから開始されます。次に、ジェネレータの(6ビット)出力をインデックスとXORして、すべての文字のエンコーディングを変更します。この手法を逆にして、暗号化されたメッセージを解読できます。
これですべてです。少し面倒です。従来は、暗号文を作成してからエンコードしていました。通常の8ビットのランダムシーケンスを6ビットにトリミングする以外は、ワークロードは従来のストリーム暗号と同じです。実際には33%の追加計算が必要ですが、それはここにもそこにもありません。
誰も同様の動作に気付いていないようであるため、このBase64バリアントを最初に考えたのはあなたかもしれません。ただし、これは機能するはずです。
コメント
- この興味深い提案に感謝します!実際、私は6ビットの文字テーブルの関連付けを並べ替えるなどの単純なことを念頭に置いていました。または、キーを導入し、キーを循環する各文字に対してビット単位のxor演算を行うなど。
- @Kagaratschまあ私たちは'同様のことを考えていると思います行。 ' PRNG機能が必要であり、キーをPRNGにリンクするには、'何らかのキー導出関数が必要です。 'は、キー形式とPRNGの操作に必要な形式/状態の不一致になります。キーなしで単に並べ替える場合、またはキー文字の循環を使用する場合、スキーム'はあまり安全ではなく、これは結局crypto.SEです:-)
- @PaulUszakその技術的な名前は、あなたがそれを知るとすぐに実際にはかなり明白です…それは'単に" XOR暗号 "。 ;)それでも、周波数分析はそれを簡単に壊してしまうことに注意してください。既知の平文攻撃についても同じことが言えます。ああ、技術的な命名に関して完全に言うと、prngを投入すると、そのような" XOR暗号"は"ストリーム暗号"。しかし、おそらくあなたはすでにそれを知っていたでしょう、'あなたは?
- @PaulUszakなぜあなたが"と言うのか分かりません"。また、"サイクリング"の意味を私が知っていると確信できます。 XOR暗号は、あなたが説明したように、同じ鍵を同じ順序で何度も繰り返し循環します。 そのwikiリンクの"例" を確認してください。説明と100%一致します…
a bitwise xor operation on each letter cycling through the key
およびCycling round through the key means that the plain text will be XORed with the same sequence over and over, and in the same order.
— 'はXOR暗号"。そこに間違いや言語のギャップはありません。
- このようにbase64を微調整する方法は、(a)バイト文字列で暗号を定義してから(b)標準のbase64を出力に適用し、暗号文のバイト文字列をプレーンテキストにマッピングすることを考慮に入れることができます。 '(a)と(b)をマージしても意味がありません。セキュリティが追加されず、基になる暗号と暗黙の標準base64の両方の記述が不必要に複雑になります。
回答
これは意味がありません。 base64には秘密鍵はありません。base64のエンコードとデコードは誰でも評価できるパブリック関数です。
base64が暗号化に関連する唯一の方法は、暗号化システムから暗号化テキストをエンコードすると便利なことです。 XMLなどのプレーンテキストに限定されたコンテキストで変更または拒否されないUS-ASCIIの限定されたセットで、8ビット文字列で均一に分散されます。
コメント
- +1(…そしてbase64は16進エンコーディングよりも短い出力を生成するため、開発され、アプリケーションで頻繁に使用される傾向があります。)
- 完璧になりますセンス:-)質問は架空のものとして提起され、OPは実装の可能性を探しています。 'すべての暗号化が非常に効率的である必要があることを要求する自然法則はありません。暗号化/復号化するだけです。人々がまだ蒸気エンジンを製造していて、それらを非常に誇りに思っていることをご存知ですか。
- @PaulUszak 'は、公共の変革であるbase64としては意味がありません。データの2つの同等の表現の間に、敵に知られていない秘密を含む暗号化スキームとは異なるタイプのオブジェクトがあります。 base64のインターフェイスと内部を変更して、ある種のキーと暗号をその中に配置する方法は、標準のbase64表現変換と、セキュリティがbase64部分とは無関係な基礎となる暗号に組み込むことができます。蒸気動力のエニグママシンを作成した場合、蒸気動力の概念を暗号化スキームに変更したと思いますか?
- @SqueamishOssifrageはい。
回答
暗号化の黄金律は、「これが暗号化されているのは、あなたがテキストを読み取れないからではない」ということです。 Base64は、暗号文を作成するために使用することを意図したものではなく、その目的で使用することはできません。
暗号化方式は常に、通信のアクターのみが反転できることを保証する秘密またはアーティファクトに依存しています。暗号文。そうでない場合は、Base64のように、暗号化されていません。
Base64は、バイナリをテキストとしてエンコードすることを目的としており、他のエンコードスキームに比べてさまざまな利点があります。プライバシーはこれらの利点の1つではありません。
回答
はい、アップストリームbase64の暗号化に関心があります。それは経済です。データを暗号化してからエンコードする場合、少なくとも2つのループを作成する必要があります。1つはデータの暗号化で、もう1つは生成されたデータのエンコードです。アップストリームを暗号化することで、ループに減らすことができます。大幅なパフォーマンスが得られます。
@ e-sushi:確かに、1つのループのみを使用する例を除いて多くの例はありません: php_base64encrypted
もっとうまくやる方法はおそらく他にもありますが、それが可能であることが証明されています…
編集:申し訳ありませんが、私はこのサイトにあまり詳しくありません。
コメント
- 「アップストリームbase64の暗号化に関心がある」という例(紙などへのリンク)を提供できますか?お気に入りの検索エンジンを使用して詳細情報を見つけようとしました、しかしどういうわけか私は失敗しました。したがって、ポインタはかなり適切ですeciated。
- Base64エンコーディングはストリーミング可能なプロセスです(つまり、 'の生成時に、最初にすべてを読み取ることなく、データのストリームを段階的にエンコードできます)。したがって、"少なくとも2つのループを作成することなく、従来の暗号化スキームで出力をインクリメンタルbase64エンコーダーにフィードさせることは完全に可能です"データに対して。これが'より一般的に行われない唯一の理由は、おそらく、これを有用にするのに十分な長さのデータストリームの場合、'通常、base64エンコーディングを完全にスキップして、生のバイナリデータとして送信または保存する方がはるかに効率的です。