私自身の暗号化アルゴリズムを書く

私は現在大学でイギリスの大学でITを勉強しています、そしてコースワークは私を死に至らしめています。私は長い間、主にC#やJavaなどのオブジェクト指向言語でコーディングしてきましたが、退屈してすぐにあきらめてしまうことがほとんどです。コード設計と実際にアルゴリズムを作成します。私は私自身の種類のアルゴリズムを書き始め、そしてユーザフレンドリ性の面から離れ始め、そして私の興味を引くもの、すなわち暗号化と圧縮を学び始めたい。ファイルまたは文字列のバイトを暗号化するために、私自身の暗号化アルゴリズムを書きたいと思います。いくつかの質問を聞きたいんです:

  • 私はこれでどこから始めますか、どんな本/材料が推奨されます 暗号化から始める理由は?
  • 基本的な知識を習得するには、暗号に関する広範な知識が必要ですか。 アルゴリズム?
  • 暗号化アルゴリズムを実行するのにC#は問題ないでしょうか?

任意の助けは心から高く評価されます。私はそれがuniに適用することになるとなると、私は私のアプリケーション上の私の大胆な主張のすべてのために示すために何かがあるので、コードを書き始めたいです!

51
暗号関連のプログラミング上の課題を探しているなら、 cryptopals.com をご覧ください。
追加された 著者 Wally Lawless,
この質問は広すぎるので答えられません。暗号化アルゴリズムの設計は、小学校の生徒ができること(例えばシーザーシフレ)から、成長した数学者を絶望させる複雑な数学的問題まで、何でもかまいません。
追加された 著者 Nik,
暗号化アルゴリズムを実行するためにC#は問題ないでしょうか? SOme暗号化アルゴリズムはどの言語からも独立して動作するはずです。あなたが例えばで行うことができない何かを使用するならば。 C、あなたのアルゴリズムは捨てることができます。
追加された 著者 Andrew Lavers,
uniに適用するとなると、表示するものがありますしないでください。暗号化アルゴリズムを使用してバックファイアするには(あまりにも多くの)方法があります
追加された 著者 Andrew Lavers,
@ S.L.Barth 強力な暗号化アルゴリズムを構築するには十分な知識が必要ですが、基本アルゴリズムには必要ありません。これがOPの望みです。私はあなたのコメントがそれに対する彼の反応に基づいて努力をあきらめることに彼を誤解させたのではないか!私はOPが簡単に基本的な暗号化アルゴリズムを書き、演習からいくつかの有用な概念を学ぶことができると思います。
追加された 著者 Ewan,
追加された 著者 nflemming2004,
@Confuto演習を学ぶために、ProjectEuler(暗号固有ではない)のようなオンライン問題DBや、人気のある暗号化テキストの各章の終わりにある演習を試してみませんか?
追加された 著者 aroth,
なぜあなたは新しいアルゴリズムを書きたいのですか?既存のものでは不十分ですか?既存のアルゴリズムの中でどのような問題が解決されることを期待していますか?それとも単に学習課題としてそれをしたいですか?
追加された 著者 aroth,
「基本的なアルゴリズムを使い始めるためには、高度な暗号化の知識が必要ですか?」はい。暗号化アルゴリズムの設計と実装は、非常に困難で、チームの専門家だけが行います。あなたが望むすべてのものを試して、学んで、楽しんでください。
追加された 著者 S.L. Barth,
初心者のプログラマーをたくさん集めて、暗号化アルゴリズムを破ることができないようにして(もちろん破れないというわけではない)チャレンジしてからお互いを破ることができれば、楽しいこともできます。アルゴリズム
追加された 著者 immibis,
@Superbestはい、これは単なる学習課題です。他の人が使用するものを作成することは期待していません。私は、物事がどのように機能するかについての知識を得て、自分自身に挑戦を与えるために、正直に言うとどんな問題も解決するとは思っていません。
追加された 著者 Ricardo Polo,
コメントありがとうございます。私はその時に取り組むべき何か他のものを見つけたなら多分最善だと思う。現実世界でデザインしたものは絶対に使用しないでください。
追加された 著者 Ricardo Polo,
@JamesRyanそれは本当です、しかし私は趣味として自分自身を教えていて、自分でプロジェクトを始めるよう強制することは時々難しいことができます。私はこれをどうにかして退屈なことをしなければならないキャリアにすることができれば、私はいつの日か知っていますが、まだ:D
追加された 著者 Ricardo Polo,
私はコメントのためにここに来ました。
追加された 著者 Fred Concklin,
@deviantfan私はこの問題を見ていません - 自作暗号は実運用では絶対に不可のものですが、趣味のプロジェクトとして披露するのは問題ないはずです。
追加された 著者 André Borie,
とにかく練習のためだけにこれをやっているのでC#は問題ないでしょう、そしてパフォーマンスはそれゆえ優先順位ではありません)
追加された 著者 André Borie,
みんなこれはどうやってよく研究されているの?あなたが暗号化に関係することをグーグルするなら、それは神のような数学者によって公表された紙か "あなたは自分ではしないでください"のどちらかです
追加された 著者 Jérémie Bonal,
@RоryMcCune私はその参照に対して十分にあなたに感謝することができません。私は数学者です、そして私のプログラミング経験のほとんどはパズルを解くことから来ています。これらの問題は、暗号化アルゴリズムの実装面を探求する楽しい方法のようです。
追加された 著者 Weyland,
私がタイトルを読んだとき、私は助けることができませんでしたが、「ええと」と発声しました…
追加された 著者 Vladislavs Dovgalecs,

9 答え

もちろん、小規模から始めて独自のアルゴリズムを実装することもできます。しかし、難読化以上のセキュリティを提供しているとは思わない

暗号化に関して困難なことは、実際に何かが安全である理由を見つけることです。あなたは数ヶ月以内にそれを決定することができないでしょう、そしてあなたがその時点にいるように感じるならば、あなたはたぶん間違っています。

安全でない理由よりも安全でない理由を見つけるのがはるかに簡単なので、どこかから始めたい場合は、安全だと思うまで独自のアルゴリズムを開発し、安全でないと考えられる理由を見つけ出して次の方法を見つける彼らを攻撃してください。

アルゴリズムを実装するときにほとんどの間違いがあります。あなたが高給の仕事を得たいのであればあなたはそのものを正しく実装する方法を学ぶことができます。

私は、AESのようなものを実装し始め、CBCやCCMのような異なる動作モードを続けて、ランダム性が重要である理由を見つけることを勧めます。 SHA-2とHMACを続けて、非対称暗号化に進みます。常に他人が何をしたのか、またなぜそれをしたのかをチェックし、サイドチャネル攻撃とその実行方法について特別な注意を払ってください。あなたがその時点にいるならば、あなたは進むべきあなたの方法を見つけるでしょう。

The reference to start with would be the "HAC", which is freely available online: http://cacr.uwaterloo.ca/hac/

[Edit] A suggestion from JRsz which shall not be buried in the comments. A good book for beginners: http://crypto-textbook.com/

138
追加された
@Confutoこれは、次のような意味で現実の世界でも同様に使用できるかもしれません。標準の暗号化+非標準の暗号化を実行すると、監視なしでロボットをターゲットにすることはできません。 DESのように古くなる傾向があるライブラリのものだけを使用する場合、これは必ずしも当てはまりません。これは重要かもしれませんし、そうでないかもしれません。
追加された 著者 James_2195,
@リッチ: "彼らは、RSAを破ることが非常に難しいことを証明することができます。" ...あなたは私を言った証拠にリンクさせることができますか?それが依存するのは因数分解が難しいということだけです。その裏に証拠はありません。あなたがそのニュースを追っているのかどうかはわからないが、グラフ同型写像のための準多項式時間アルゴリズムの最近の開発があり、それについて聞いた後、因数分解が準多項式で解決できるかどうか疑問に思う人がいる。時間も。 ECCについても同じことが言えますか。誰もそれを破ることができなかったので、人々はECCが難しいと思います。証明はありますか?いいえ
追加された 著者 Annie,
@リッチ:そしてECCはどうですか?また、あなたがあなたのアルゴリズムをより安全にしないというあなたの仮定を述べるならば。私はアルゴリズムを思いつくことができ、私の仮定も述べることができます。それは今安全だということですか?あなたは私のポイントを逃しているような気がします…
追加された 著者 Annie,
@リッチ:(1)素因数分解が難しいという仮定は、誰もそれを破ることができなかったので「強い」だけです。これは、誰も取り組んでいないという新しい仮定が弱いことを意味するのはなぜですか? (2)ECCの強みを裏付ける仮定は何ですか?あなたはこれに答えるのを避け続けます。
追加された 著者 Annie,
@ fr00tyl00p:それを全体像にまとめると、ECCが実際に安全であると信じるのは困難です。それは本来あるべき姿には見えませんし、硬さの証明など何も必要ないので、週末に思いつくことができるようなもの、単なる直感です。私が欠けていることの一つは、人々に真剣に同様のアルゴリズムを採用させるという良い評判ですが、他に何が欠けているでしょうか?私はそれが難しいと主張して、誰かが私を間違っていると証明するのを待つことができました。では、なぜECCを私が思いつくかもしれないランダムなアルゴリズムよりも安全だと考えるのでしょうか。
追加された 著者 Annie,
@ fr00tyl00p:繰り返しますが、私はあなたの全体的なメッセージや結論に異議を唱えているわけではありません。私が賛成できないのは、暗号技術者が「なぜ彼らのアルゴリズムが実際に安全なのかの理由を見つける」というあなたの前提です。私の理解の限りでは、彼らは実際にはそうしていません。その理由は、アルゴリズムが既に発明された後で、それが壊れていないという事実によってもたらされます。それまでは、そのすべてが、アルゴリズムが安全でなければならないという直感を持っているという事実に基づいており、反対の証拠はありません。あなたの答えは、暗号学者が解読不可能か何かを証明しているように見えます。
追加された 著者 Annie,
@mbrt:あなたの論理では、安全な暗号化アルゴリズムを発明することは不可能です。
追加された 著者 Annie,
全体的なメッセージに賛成できないというわけではありませんが、... "暗号化に関して難しいのは、実際に安全である理由を見つけることです。 RSAのようなアルゴリズムが安全であることをなぜ知っていますか。私の知る限りでは、誰もそれを破る方法を見つけることができなかったからです。では、なぜ生徒は自分のアルゴリズムがもっと悪いと信じるべきなのでしょうか。
追加された 著者 Annie,
に+1もちろん、始めは小さく始めて独自のアルゴリズムを実装することができます。しかし、それらが難読化以上のセキュリティを提供すると仮定しないでください。多くの人が「しないでください」と言い続けますが、これはもっと学ぶための良い機会を提供します。この小さな免責事項は優れています。
追加された 著者 Mark Buffalo,
追加された 著者 user8807,
「アルゴリズムをより安全にしないような仮定を述べた場合」 - あなたの仮定が強く、あなたがあなたの仮定とあなたのアルゴの安全性の間のリンクを証明しているなら、それはそうです
追加された 著者 user8807,
@ Mehrdad:あなたは私を誤解していると思います。 RSAが「安全」であるという証明があるとは言いませんでした。私はRSAが安全であるという証明があることを述べました。私はあなたの最初の質問に答えようとしています、「なぜ自分のアルゴリズムはRSAよりも悪いと信じるべきなのか」 - これらの証明で使われている仮定は非常に強く、曖昧な主張よりはるかに強いからです。だれも学生Xの暗号をまだ破っていない」。
追加された 著者 user8807,
@ Mehrdad:はい、ウィキペディアに引用があります。「ミラーは、拡張リーマン仮説を仮定すると、nとeからdを求めるのは因数分解と同じくらい難しいことを示しています」 ja.wikipedia.org/wiki/… 先に述べたように、暗号学者たちは彼らの仮定、すなわち拡張リーマン仮説と困難な素因数分解を述べ、それからこれらの仮定の下で安全なRSAを証明した。私の論点は、これらの仮定は単なる古い「しかしXはまだ壊れていない」という主張よりもはるかによく理解されており、真実である可能性が高いということです。
追加された 著者 user8807,
@mbrt:いいえ、RSAの強さは分解されていない因数分解に依存しているということでした。これは、新しい暗号Xについては「Xはまだ破られない」よりはるかに強い主張です。私のコメントでは、前提条件があると述べたが、それらの前提条件は詳細に説明して定量化することができ、「誰もまだmbrtの暗号#7を破っていない」よりはるかに強い。
追加された 著者 user8807,
@ Mehrdad - 暗号学者たちは、RSAは「まだ壊れていない」以外に安全であると信じる理由を持っています。基礎となる数学を研究することによって、彼らはRSAを破ることが非常に難しいことを証明することができます。 (素因数分解が遅いなど)前提条件がありますが、それらの前提条件は詳細に説明して定量化することができ、単なる「だれもハックを見つけていない」よりもはるかに強力です。良い入門数学暗号本はこれを詳細に説明するべきであるか、または「RSAが安全な理由」
追加された 著者 user8807,
HACは、新しい暗号数学を真剣に実装している人にとっては素晴らしい参考テキストですが、初心者には密度が高すぎると思われます。
追加された 著者 3498DB,
初心者にとってはhacはとても複雑です。私はこの本を良いスタートのために推薦します: crypto-textbook.com
追加された 著者 Steve Ruiz,
私はこれがユーザーに期待に応えて試してみることを奨励しています。ピアに暗号化を破らせようとするのは、良い(そして必要だと主張するでしょう)練習です。
追加された 著者 corsiKa,
私は自分が作ったものが現実の世界では使えないということを知っているだけではありません。
追加された 著者 Ricardo Polo,
回答として選択、ありがとう。ここからの途方もない反応に圧倒されて、みんなにどうもありがとう!
追加された 著者 Ricardo Polo,
@ Mehrdad RSAが安全である理由は、RSAの問題が難しいことです。あなたが正しいです。誰もそれを破る方法を見つけられなかったのでそれは難しいです。それは防御的な態度なので、学生は自分のアルゴが弱いと信じるべきです。誰かがそれを破らない限り、彼らのアルゴリズムが安全であると仮定するよりも合理的である私見は、RSAを破ろうとした人々よりはるかに少ないかもしれないので、
追加された 著者 CuriousSuperhero,
十分な数学/ cs /暗号の知識なしであなた自身の暗号化アルゴリズムを構築することは暗号化と呼ばれるのではなくエンクラップメントと呼ばれます。アルゴリズムを実装して学習しようとするよりも、より多くの数学(深くて難しい数学のトピック)およびCSを学び、既存のアルゴリズムを再実装してそれらの弱点を研究する必要があります。
追加された 著者 DataGuy,
@ Mehrdadそれは単に彼/彼女のアルゴリズムが35年間使われておらず、まだ壊れていないからだと思います。
追加された 著者 Alex H,
@リッチRSAセキュリティに関して数学的証明も計算的証明もありません。因数分解は指数関数的な時間を要するという仮定です。しかし、これは単なる仮定であり、証明ではありません。繰り返しますが、これは実際にはRSAが「まだ壊れていない」ことを意味します。
追加された 著者 Alex H,

コースラ

これが私の2セントです:

Join the コースラ Cryptography online class:

授業は6週間かかります。毎週いくつかの講義ビデオ、段階的なクイズと任意のプログラミング課題があります。 (そしてこれらの課題は暗号部分の実装を含みます。)

6週間の終わりにテストがあります。

あなたが挑戦したいのなら、これは正しい道です。大変な作業です。毎週10時間以上の計画を立てることをお勧めします。あなたが同様にプログラミング割り当てをしたいならばもっと。

編集:これは、前回のこのクラスの実行に関する目次です。

明確化:プログラミング課題は、トピックのより深い理解を生み出すためだけにあります。それらは明らかにあなたがその後野生に解放することを意図しているものではありません。
それどころか、「これまで自分で実装してはいけません!」というメッセージが何度も繰り返されます。 (そして、あきらめずに、「自分で実装するだけ」と言った場合はいつでも、間違いです。)

37
追加された
私は、Courseraを忘れました、ありがとう!私はLynda.comを購読していますが、彼らは暗号についてはあまり持っていません。
追加された 著者 Ricardo Polo,
クラスの+1とてもやりがいがあります。プログラミングの割り当てはC言語で行われています。
追加された 著者 Scott C Wilson,
実際にはどの言語でもかまいません。結果のみが送信されます。実装ではありません。フォーラムでは、さまざまな言語での実装があります。例はPython 2にあります。
追加された 著者 StackzOfZtuff,

自分で作るのではなく、壊すことから始めましょう。独自のアルゴリズムを書いたことのある人たちによる、驚くほど多数のstackexchangeの投稿があります。周りを見て、何が悪いのかを見つけ出してください。 (投稿された答えを見ないでください。)[良い検索には、 "これは安全です"と "このアルゴリズムには何が問題があります。

他の人の仕事に問題が見つかった場合にのみ、他の人のアルゴリズムを実装しようと試みるべきです。 (@ stackzofztuffのCourseraに関するコメントは悪くありません。思い出してみると、Dan Bonehはそのようにして開始します。

21
追加された
見てみてくださいこれらの記事の見つけ方を教えてくださいタグ、Webサイトなどで質問を絞り込む必要がありますか。
追加された 著者 AlexC,
私は "これは安全ですか?"を検索し、最初の5つの質問から始めるのが良いと思います。私はより鮮明になるように私の回答を編集しました。
追加された 著者 3498DB,
@ A. L、複数のタグで検索するのが最も効果的だと思います。 暗号+アルゴリズムまたは暗号化+アルゴリズム。あなたは少し掘り下げる必要があるでしょう、しかし一目で、私はいくつかの質問を見ます。それらは、混合アルゴリズムや既存のアルゴリズムに追加された小さな難読化のような小さなものの下に広く埋められていますが。セキュリティを向上させず、セキュリティを低下させないものがたくさんあります。これが効果的であるという点で私はAdam Shostackに同意しません。
追加された 著者 Kat,

この分野の学習を始めたい場合は、Bruce Schneierの Applied Cryptography をお読みください。私は誰も前にそれを提案しなかったことに驚きました。

そしてはい、あなた自身のアルゴリズムを楽しくしようと試みる前でさえも、暗号について多くのことを知っておく必要があります。しかし、現実世界の問題にそれらを使用することすら考えてはいけません - すでにたくさんの悪い暗号があります

プログラミングに関しては、ペストのような独自の言語は避けてください。私はC、あるいはC ++さえもお勧めします。

13
追加された
私が正しく思い出した場合、C#も常にECMAを介して標準として公に文書化されています(そしてそれがマイクロソフトのコンパイラが準拠すると期待されている標準です)。
追加された 著者 Sergio del Amo,
Bruce Schneierの本は+1。
追加された 著者 jf328,
そして、常にSchneierのルールを覚えていてください...誰もが破ることができない本当に素晴らしい暗号化アルゴリズムを作成することができます。つまり、ピアレビューは、それが実際に機能することを証明するために必要です。
追加された 著者 Fiasco Labs,
「プログラミングに関しては、ペストのような独自の言語は避けてください」と言うのはなぜですか。私が経験したところでは、C#で最適化されたコードを記述すれば、コードをC/C ++にかなり簡単に変換できます(多くの場合、そうではありません)。また、C#コンパイラはオープンソースになりました(Apache 2.0でリリースされました)。
追加された 著者 bobo2000,
@ dr01特定の言語よりも一般的なことを学ぶとき、使用されている言語で装填して銃をコックして腰にダクトテープを貼らないと便利です。基本概念として「未定義の動作」を持つ言語は、アルゴリズムの学習には適していません。 Cには多くのことが行われており、その場所もありますが、学習アルゴリズムとはまったく関係のない特定の専門知識が必要です。
追加された 著者 user50027,
@Toothbrushそれでは、なぜオープンで、成熟し、そして広く普及しているCを直接使わないのか。
追加された 著者 dr01,
@ dr01真剣な暗号化アルゴリズムを書いているのであれば、きちんとレビューできるように、必ずCで書いてください。しかし、暗号化の意味を理解するためにコードを作成しただけでは、快適な言語を使用しないでください。それを見るだろう唯一の人々が彼と彼の猫であるならば、それがAutoLispで書かれるならばそれはどんな違いを生むのでしょう!多分Applescriptが戻ってきて新しい暗号化標準になるでしょう…;)
追加された 著者 Michael B,

良いスタートは、既存のアルゴリズムを実装し、それらがどのように詳細に機能するかを学ぶことです。たとえば、ワンタイムパッドアルゴリズムは習得が簡単で、実装も簡単です。その長所と短所を調べることで作業を始めることができます。それはまた、暗号化において重要であるようなちょっとした回転に慣れるためのものです。 「ワンタイムパッド」を検索すると、始められます。

10
追加された
暗号化アルゴリズムに関してOPに関連する点は、通常、実装されているロジックではなく、その背後にある数学です。 AESはこれに対する非常に良い例です。コードには、いくつかの単純なビットシフトと低レベルの数学的命令しかありません。アルゴリズム自体は、暗号化されたデータを純粋にランダムに見せるように設計されています。つまり、控えめに言っても、設計者が達成するにはかなりのスキルが必要です。
追加された 著者 Nik,
しかし、ontimepadは「奇妙な」アルゴリズム(使用可能なアルゴリズムと同様に)であり、AESなどを理解する上ではあまり役に立ちません。 (など)
追加された 著者 Andrew Lavers,
ワンタイムパッドは興味深いケースですが - これは非常に単純なアルゴリズムであり、最適な条件では解読不能です。その弱点は、「現実世界」のアプリケーションにとっては自明ではないスケーラビリティと鍵交換に由来します。しかし、それが他の暗号化オプションを理解するのに本当に役立つことはわかりません。それは、信頼、鍵交換などに対処する必要がある結果として非常に複雑です
追加された 著者 Matt,

ここにあるすばらしい答えに、別の角度で積み重ねるだけです。

あなたのv1アルゴリズムが安全でなくひどいものになるだろうと仮定した場合、あなたのv100はほんの少しだけ良くなるでしょうが、同様に安全ではありません。 (あなたのv1000のように)

その前提を念頭に置いて、今日の科学になるために暗号化技術が解決する必要がある問題を解決することで、多くのことを学ぶことができます。すなわち、車輪を再発明する。

個人的には、ホイールの再発明は、複雑なタスクを学ぶための優れた方法です。それはあなたに解決するための何かを与えます。それがあなたのものであれば、暗号化よりも解決が難しいものは少なくなります。

そのように、あなたは大学に行って、言うことができます、よく私は難しい問題を解決する方法を学ぶための手段として私自身の暗号化アルゴリズムを設計していました。 v50ではアルゴリズムは駄目になりますが、これらは私が学んだ教訓、私が見つけた解決策、そしてこれが実世界でそれらが解決される方法です。

私が「良い」暗号化プロトコルを書いたことと、ほぼ確実に非常に弱いプロトコルを書いたことの間には大きな違いがあります。個人的には、後者を言った人には大いに敬意を表したいと思います。 (私はおそらく前者にうなずいた - そしてすぐに彼にドアを見せる)

6
追加された
この。 OPは興味深い挑戦 - 次のビッグシングの発明者にならないために学ぶチャンス - を探しています。
追加された 著者 Dr. Nagham Aljamali,

既存の暗号化アルゴリズムを実装することはできますが、独自の暗号化アルゴリズムを設計することは、対処できる最も複雑な問題の1つです。 一般的な紹介として、私はこのチャンネルを強くお勧めします。 /ビデオまたはChristoph PaarとJan Pelzlによる "Understanding Cryptography"( http:// crypto-textbook)。 com/)。 私はあなたが対称アルゴリズムを狙っていると思います、そして私はあなたがそれらについて多くの理論を読むことを始めることをお勧めします、安全で安全ではありませんでした。 (AESはどのように開発、選択されたかなど)。

対称的な部分であっても、さまざまな攻撃者モデルを扱うと、多くの数学的問題に遭遇します。非対称暗号化は数学的問題に大いに基づいており、非対称暗号化に対して非常に強力ないくつかの非常にトリッキーな攻撃があります。

要点は、あなたが長年の経験を持ち、トピック(それのすべての部分)に非常に精通していない限り、あなた自身のアルゴリズムを開発しないことです。それでもいくつか実装するのは良い考えですが、何らかのプロジェクトを探しているのであれば、なぜ既存のアルゴリズムを使ってデータを復号化するプログラムを書いてはいけないのでしょう。安全なアルゴリズムは安全な暗号化を保証するものではないため、これに対処するには十分な問題があります。この問題やその他の問題では、さまざまな動作モードが重要になります。

3
追加された

先に進んで、アルゴリズムを書いてください、しかし最後に、暗号化を定期的に扱うあなたの友人/仲間のうちの1人にタスクを与えてください。可能であれば、暗号化を解除するように伝えます。

あなたは彼らがほんの数分でそれを破ることができるであろうことに気付くでしょう、そしてあなたは広範囲な暗号化の知識を持つ人々にゲームを譲った抜け穴がいくつあったかについて考えて驚かされるままになりますあなたの言葉を宣伝するために)

これは私がずっと前に私がプログラムすることを学んでいたときに私に起こったことであり、そのようなことに頭が良くて惨めに失敗した何人かの人に挑戦したかったのです。それほど多くのので、彼らは彼らの心と技術だけを使って紙に印刷されたメッセージを解読することさえできた。

あなたは確かにそのうちの1つを書いて完成させることができますが、その知識を持つ人々に対していつでも安全にすることは決してできません。

それはあなた自身のアルゴリズムを書くというあなたの探求の良い出発点(あるいはおそらく停止点)になるでしょう:)

2
追加された

あなたはワンタイムパッドについてのScott Wilsonの提案に従うことができたが、本当のランダムデータを使った。できます。コンピュータのWebカメラからのノイズを考慮してください。ウェブカメラに静的シーンの写真を数枚撮り、画像を32ビット浮動小数点画像に変換し、写真を同じ明るさに正規化し、平均を取ってから平均から1枚の写真を引きます。負のピクセル値を0に、正のピクセル値を1にマップすると、ほぼ完全にランダムなビットが得られます。これは、ピクセルが近すぎない場合は相関関係がありません。離れたピクセルから取られたビットのペアにフォンノイマンのアルゴリズムを適用する:

(0,1) ---> 0

(1,0)---> 1

(0,0)と(1,1)は破棄されます

0と1が正確に50%の確率で完全なランダムビットを生成します

2
追加された
これが質問に答えているかどうかわからない
追加された 著者 schroeder,
コンピュータからのランダムさの簡単な原因。ありがとうございました!
追加された 著者 user82913,