LlXorBase64StringsCorrect/ja

From Second Life Wiki
< LlXorBase64StringsCorrect
Revision as of 05:24, 12 April 2010 by Mako Nozaki (talk | contribs) (Undo revision 852102 by Mako Nozaki (Talk))
Jump to navigation Jump to search

要約

関数: string llXorBase64StringsCorrect( string str1, string str2 );

二つの Base64 文字列の XOR を計算します。
str1str2 を Base64 XOR した文字列を string で返します。

• string str1 Base64 文字列
• string str2 Base64 文字列

str2str1 より短い場合、同じ長さになるよう自動的に繰り返して調整されます。引数が Base64 文字列でない場合、戻り値は突飛なものになるでしょう。
暗号化アルゴリズムを設計する前に ノート を必ず読んでください。

サンプル

<lsl>default {

   state_entry(){
       
       // 大文字、小文字、数字、記号を使った複雑なパスワードを使いましょう。
       string pass = "P4s5Wo_rD";
       
       string data = "I am some ver important data.";
       
       // データを暗号化する
       string crypt = llXorBase64StringsCorrect(llStringToBase64(data), llStringToBase64(pass));
       
       // 出来上がった意味不明の文字列を表示
       llOwnerSay(crypt);
       
       // 復号化し、平文を表示
       llOwnerSay(llBase64ToString(llXorBase64StringsCorrect(crypt, llStringToBase64(pass))));
       
   }

}</lsl>

注意点

最も良い使い方

暗号化の手法としては XOR は脆弱で、XOR の入力を効率よく求める攻撃手法がいくつかあります。暗号の扱われ方によっては、一つの暗号が破られることによって入力が明らかになり、ひいてはアルゴリズム自身が破られることになります。

パスワードとなる種 (seed) は秘密にしてください。種は XOR で使う前にハッシュ関数でシャッフルし、また時々変更しましょう。

処理の仕組みを知らずに、長さの違う二つの値で XOR を求めてはいけません。一見良い考えに思えるかもしれませんが、それはフィールドをリンクしているだけです。(最小公倍数の長さの) より長い鍵が出来ますが、フィールドがリンクされるため、最小公約数と同じ数のフィールドしかありません。独自のフィールドの数が、攻撃者にとって解読すべき鍵の理論的な最大数を決定します。

Unique_Key_Fields = Greatest_Common_Divisor(lengths_of_keys) * number_of_keys

攻撃方針

まず、XOR は限定的な文字列暗号だという点に留意してください。

  • 確率: 英語では、各文字の出現頻度は、文法や綴りによって異なります。XOR にはこの出現確率が反映されます。この手法は、鍵が文章よりかなり短い場合にのみ有効です。
  • UTF-8 ルール: 文字列を Base64 へ変換するとき、UTF-8 エンコードがまず使われます。入力が有効な UTF-8 文字列と分かっているならば、いくつかのビットを理論的に決定することができます。
  • 平文: あらかじめ分かっている入力に対する出力が知られてしまうと、鍵には脆弱性が生じます。
  • 総当り: 鍵、パスワードおよび/あるいは種を攻撃します。

関連項目

特記事項

Search JIRA for related Issues

Signature

function string llXorBase64StringsCorrect( string str1, string str2 );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。