一部の暗号化アルゴリズムには、キーとのXOR演算の使用が含まれます(AESでもXORを使用してラウンドキーを導出するために使用します。) ORまたはNANDまたはその他の論理演算についてはどうでしょう。他の論理演算の代わりにXORを選択した理由はあると思いますが、実際にはわかりません。
ありがとうございました
XORは常に逆転可能な操作であり、すべての情報が保持されます。それはそれと同じくらい簡単です。 ANDとORを使用すると、オペランドの特定のビットが1と0のどちらであったかがわからないため、情報が失われる可能性があります。
python replで少し遊んで、19(10011
)および5(101
)これらの数値は良い例を作るためです。
ORを使用すると、特定のビットがオンになったオペランドに関する情報が失われます。
>>> bin(19|5)
'0b10111'
19歳じゃないですか?ええ、それは19です。結果の数値は、それが5とOR演算されていることを教えてくれません。
ANDの使用は同じです。
>>> bin(19&5)
'0b1'
それは1です。どちらも(19または5)を簡単に回復する方法はなく、情報を失いました。
XORを実行しても情報が失われないため、XORは暗号化ツールに適しています。
>>> bin(19^5)
'0b10110'
それは22です。明らかにそれは私たちに多くを伝えませんが、これを見てください:
>>> bin(22^5)
'0b10011'
>>> bin(22^19)
'0b101'
22を他の番号とXORすることにより、どちらかの番号を回復できます。これは、秘密鍵の非常に原始的な概念です。あなたと他の誰かが非常に大きな乱数の巨大なリストを持っていると仮定すると(両方とも同じ番号です)、単純にXORメッセージを送信し、自分同士で安全に交換できます。安全なアルゴリズムであり、通信するたびに別の番号を使用するため、アルゴリズムはone-time padと呼ばれます。
XORは、主に2つの理由で暗号化で使用されます。たとえば、A xorとBの結果がCになる場合は、リバーシブルです。AxorとCの結果は、Bになります。ANDおよびORとは異なり、0と1の確率は等しくなります。 ANDが使用されている場合、出力0の75%の確率と1の25%があります。ORが使用されている場合、出力1の75%の確率と0の25%があるため、「1」また、「0」の出力は均一に分散されていないため、ランダムさが発生しません。