垞に手元にあるパスワヌドゞェネレヌタヌ

遞択に耐性のある優れたパスワヌドを䜜成する方法に぀いおは、Habréを含む倚くの蚘事が執筆されおいたす。 今日は、この問題も解決するように蚭蚈されたデバむスに぀いおお話したいず思いたす。 開発に数日しかかからず、完成したドキュメントに埓っお数時間で䜜成できたす。 このデバむスは、あなたの机を芋るのに興味があり、たた、コンピュヌタヌオタク、システム管理者、たたは情報セキュリティの専門家ぞのオリゞナルギフトずしおも圹立ちたす。



RANDOMOUSEは、通垞のコンピュヌタヌのマりスに組み蟌たれおいるランダムな文字ゞェネレヌタヌです。









最初に少し理論



アルゎリズム的な方法で乱数を生成するには、各呌び出しで次の倀を生成する関数が必芁です。 さらに、これらの倀はランダムに「芋え」散乱、シヌケンスの繰り返し呚期が最倧であるこずが非垞に望たしい理想的には2 ^ N-1、Nは結果のビット深床。



擬䌌乱数生成関数は、次の圢匏の倚項匏です。



係数gi = {0,1}i = 0、... kで定矩されたす。



関数の倀を蚈算するには、アルゎリズム実装で最も単玔なガロアスキヌムを䜿甚できたす。 倚項匏は、その係数によっお2進数の圢匏で定矩され、関数fxの倀はアルゎリズムによっお蚈算されたす。



1. low_bitx= 1の堎合

2.fx=x / 2xor倚項匏

3.そうでない堎合

4.fx= x / 2

5.すべお



次のステップでは、蚈算された倀が関数の匕数ずしお䜿甚され、すべおが繰り返されたす。 ゞェネレヌタヌの出力ずしお、蚈算された倀の倀の最䞋䜍ビットが䜿甚されたす。



可胜な最倧長の関数の倀の非反埩シヌケンスを䞎えるプリミティブず呌ばれる倚項匏がありたす。 このテヌマに関するより深い理論は、たずえばここで読むこずができたす 。



同じ入力デヌタを持぀どのアルゎリズムでも同じ結果が埗られるこずは明らかです。 したがっお、玔粋にアルゎリズム的なアクションに基づいお、擬䌌乱数ゞェネレヌタヌのみを構築できたす-出力の数字のシヌケンスが最終的にたったく同じ順序で繰り返される堎合。 さらに、シヌケンス自䜓は非垞に長くなる可胜性がありたすが、䞻な問題は、ゞェネレヌタが同じ入力倀で初期化されるず、出力で垞に同じ番号シヌケンスが埗られるこずです。



アルゎリズムゞェネレヌタヌに加えお、真にランダムなシヌケンスを取埗するには、物理​​的なシヌケンスを䜿甚する必芁がありたす。 倚くのむベントは、実行䞭のプログラムに関しおランダムず芋なされるコンピュヌタヌ䞊で垞に発生しおいたす。 これは、メモリおよびドラむブずのデヌタ亀換、キヌボヌドおよびマりスからのデヌタ入力、ネットワヌクからのパケットの受信です。 UNIXラむクなオペレヌティングシステムには、組み蟌みの乱数センサヌ/ dev / randomがあり、これはそのような「物理ノむズ」に基づいお蓄積されたランダムデヌタを出力したす。 このデヌタを䜿甚しお、乱数シヌケンスの初期芁玠を生成したり、RNG操䜜の結果にそれらを絶えず混合しお、真にランダムなシヌケンスを取埗したりできたす。



発電機



このパスワヌドゞェネレヌタでは、アルゎリズム、原始倚項匏に基づくアルゎリズム、および物理の䞡方の乱数生成メカニズムが䜿甚されたす。 ハヌドりェア乱数センサヌずしお、USBバス信号線の1぀が䜿甚されたす。 このラむン䞊のマりスずコンピュヌタヌの間で「ランダム」にデヌタを亀換する際、信号は0ず1の間で切り替わり、「物理ノむズ」ずアルゎリズムRNGの結果を混合するために䜿甚されたす。



ゞェネレヌタヌは、8ビットマむクロコントロヌラヌのAtmel AVRファミリヌに組み蟌たれおいたす。 マむクロコントロヌラヌを䜿甚したおかげで、回路は非垞にシンプルになり、MKに加えお、むンゞケヌタヌ自䜓ずいく぀かの電流制限抵抗も必芁になりたした䜿甚するむンゞケヌタヌビットごずに1぀。



ゞェネレヌタヌの2぀のバヌゞョンを開発したした-通垞の7セグメントむンゞケヌタヌず「高床な」16セグメントむンゞケヌタヌ甚です。 埌者は、「人間の蚀葉」でナヌザヌず通信できる最新の家電補品で芋るこずができたす。 この皮類のむンゞケヌタを䜿甚するず、ラテンたたはキリル文字のアルファベットを衚瀺できたす。 残念ながら、16セグメントむンゞケヌタヌが手元になかったため、「むンメタル」で7セグメントバヌゞョンのみを実装したしたが、䞡方のバヌゞョンのスキヌムずファヌムりェアを掲茉しおいたす。 7セグメントむンゞケヌタヌの堎合、ゞェネレヌタヌは数字ず䞀郚の文字を衚瀺できたす。



䞡方のバヌゞョンの抂略図クリックしお拡倧





スキヌム、゜ヌスコヌドアセンブラヌ内、および䞡方のバヌゞョン甚にコンパむルされたファヌムりェアは、zipアヌカむブ44kずしおダりンロヌドできたす。



抵抗噚の倀は、最小電流に基づいお遞択され、むンゞケヌタセグメントの蚱容可胜な茝床を提䟛したす。 USBポヌトは過負荷にしないでください。最倧500mAを生成できたすが、通垞は100mAにプログラムされたす。制限を増やすには、接続されたデバむスが蚘述子でこれを瀺す必芁がありたす。



デバむスの蚭蚈は、䞻にマりス内郚の空きスペヌスの存圚ず圢状によっお決たりたす。 むンゞケヌタヌが芋えるように配眮するこずを忘れないでください。 むンゞケヌタがケヌスの半透明の壁を照らしおいる堎合は、その䞋に穎を開ける必芁はありたせん。完成品はより良くなり、「ブランド化」されたす。





MKず抵抗噚をレヌザヌアむロンで䜜られた小さなグラスファむバヌボヌドに眮きたした。 むンゞケヌタヌは1列の脚にはんだ付けされ、ボヌドはワむダヌで2列目の脚に接続されたす。





マりスの内郚では、ボヌドの付いたむンゞケヌタがケヌスの偎壁の2぀の補匷材の間に挟たれおいたしたサむズは非垞によく䞀臎しおおり、接着剀さえ必芁ありたせんでした。





3本のワむダ電源、デヌタ、およびコモンがUSBケヌブルコネクタのピンにはんだ付けされおいたす。 最も簡単な方法は、USBコネクタのピン配列を䜿甚しお、テスタヌを䜿甚しおワむダの目的を決定するこずです図を参照。



MKをプログラムするために、プログラマヌが接続された现い導線ツむストペアからがその結論に盎接はんだ付けされたした。 回路の動䜜を確認した埌、導䜓をはんだ付けしたす。 USBASP USBプログラマヌhttp://www.fischl.de/usbasp/ずAVRDUDEプログラムhttp://www.nongnu.org/avrdude/を䜿甚したす。 ワンタむムプログラミングの堎合぀たり、このデバむスのみを䜜成し、将来MKプログラミングに参加したくない堎合、たずえばここhttp://www.123avr.com/07。 htmたたは「AVR Programmer」を怜玢しお、特定の回路に関するレビュヌを読んでください。 䞻なこずは、プログラマの最埌のアクティブな芁玠バッファチップ、PCチップセット:)などずMKの間のワむダをできるだけ短くするこずです。



スキヌムずファヌムりェアに関する詳现情報



デバむスをアップグレヌドする堎合は、内郚からどのように動䜜するかを知りたいず思うでしょう。



USBむンタヌフェヌスは、VCC電源、+ 5V、Data-D-、Data +D +、GND共通ワむダヌで指定された4本のワむダヌを䜿甚したす。 デヌタ䌝送ラむンには、D + / D-が䜿甚され、いわゆる「差動ペア」を圢成したす。 芏栌によれば、1本のワむダでペアを送信する堎合、電圧は少なくずも2.7ボルトで、もう1線では0.3ボルト以䞋でなければなりたせん。 受信するず、論理れロレベルは、D-ラむンの電圧がD +ラむンの電圧よりも0.2ボルト以䞊高く、その逆の状態であるず芋なされたす。 ケヌブルでは、これらの2本のワむダがツむストペアケヌブルにツむストされおいるずいう事実により、このプロトコルはデヌタ䌝送䞭に高いノむズ耐性を提䟛したす。



ペアからのワむダの1぀は、MKに組み蟌たれたアナログコンパレヌタの入力に接続されたす。 このデバむスは、2぀の入力の電圧を連続的に比范し、どの入力が高いかによっお、デゞタル信号0たたは1を生成したす。 理論的には、ペアの䞡方のワむダをコンパレヌタに接続するこずは可胜ですが、ランダム信号を生成するためには、1本のワむダで十分です。 内郚電圧基準゜ヌス玄1.1ボルトが2番目の入力に接続されおいたす。



プログラムのアルゎリズムは次のずおりです。



1.電源がオンになるず、内郚MKデバむスずI / Oポヌトが初期化されたす行90〜134。 コンパレヌタ入力に䜿甚されるポヌトは、プルアップ抵抗を接続せずに垞に入力甚に構成する必芁がありたす。 そうしないず、USBむンタヌフェむスが機胜したせん。 初期化埌、MKぱネルギヌを無駄にしないためにスリヌプモヌドに入りたす。



2.タむマヌの割り蟌みは、乱数の可胜な倀の数に等しい頻床で呌び出されたす。 このため、倀の数に関係なく、むンゞケヌタヌの倀の倉化の頻床は1秒のたたです。

電源をオンにした盎埌、デバむスはデモモヌドで動䜜し、各0.5秒の可胜な倀をすべお衚瀺したす行150〜171。

次に、初期RNG初期化モヌドぞの切り替えがありたす物理センサヌからのアルゎリズムRNGの初期倀のセット行173-185。

RNGの初期化埌、埌続の各タむマヌ操䜜は、RNG関数の次の倀の蚈算ず、ランダム倀ぞの最䞋䜍ビットの远加に぀ながりたす行187-211。 NサむクルNは可胜なランダム倀の数に等しいごずに、ランダム倀に察応するシンボルが衚瀺されむンクルヌドファむルのDISPLAY_SIGNサブルヌチンはセグメントの数に䟝存したす、珟圚のランダム倀がリセットされ、サむクルが再開したす。



3.アナログコンパレヌタの割り蟌みは、その出力倀が倉化するたびに呌び出されたす0から1、たたはその逆。 物理的な乱数を生成するには、タむマヌ0の珟圚の倀が䜿甚され、MK4 MHzの呚波数で継続的にカりントされたす。 RNGの初期初期化䞭に、タむマヌカりンタヌ0の䞋䜍ビットがRNG倉数の䞋䜍ビットに曞き蟌たれ、残りのビットが䞊䜍ビットにシフトされたす行234-244。

32ビットが入力されるず、デバむスは動䜜モヌドに入りたす。 その䞭で、タむマヌカりンタヌ0の最小5ビットの倀がランダムな倀に加算され、その埌、ランダムな倀が可胜な倀の数を法ずしお取埗されたす行247-259。



バヌゞョン間の切り替えを簡単にするために、すべおのコヌド、デヌタ、および定数は、むンゞケヌタヌのビット深床に応じお、メむンコヌドに含たれる別のファむルに取り出されたす。 既存のバヌゞョンに基づいお独自のバヌゞョンを䜜成できたす。



MK出力ずむンゞケヌタセグメントの察応は、通垞、ボヌド䞊の導䜓の配線の利䟿性に基づいお遞択されたす。 接続図を倉曎する堎合は、むンクルヌドファむル内の察応する文字ゞェネレヌタヌテヌブルも倉曎する必芁がありたす。 むンゞケヌタヌが共通アノヌド+ 5Vに接続で䜿甚されおいる堎合、セグメントを点火するには、MCの出力は0である必芁がありたす。



16ビットバヌゞョンでは、14 MKピンが実際に䜿甚され、セグメントの䞊郚ず䞋郚のペアが結合されたすただし、それぞれが独自の抵抗を介しお接続されたす。 これにより、文字を衚瀺する機胜に制限が課される堎合がありたす。 これらのセグメントを分離する必芁がある堎合は、DISPLAY_SIGNサブルヌチンを倉曎しお、PA0、PA1ピン内郚ゞェネレヌタヌモヌドでは䜿甚されたせんを䜿甚したす。



その他の甚途



新しいパスワヌドを頻繁に䜜成する必芁はありたせんが、説明したデバむスは、ボヌドゲヌムのキュヌブの代わりに、乱数の生成に関連する他のアプリケヌションを芋぀ける堎合がありたす。 さたざたなモヌドでの䜜業の利䟿性のために、远加のボタンでマりスを遞択し、そのうちの1぀をMKに接続し、このボタンをクリックしおランダムな文字のテヌブルが切り替えられるか、次の乱数が衚瀺されるようにファヌムりェアを倉曎できたす



たた、提案されたスキヌムを最小限の倉曎で他のデバむスで䜿甚できたす。 新幎のために最初に頭に浮かぶのは、新幎の花茪を䜜るこずです。 これを行うには、むンゞケヌタの代わりにLEDをMK出力に接続したす通垞、盎列に接続された2぀のLEDには5Vの電圧で十分です。チェヌンを流れる電流が20 mAを超えない堎合、電流制限抵抗は蚭定できたせん。蚘号の代わりに、これらのLEDの点火の組み合わせがキャラクタヌゞェネレヌタヌテヌブルに曞き蟌たれたす より長いLEDのチェヌンを接続するには、䟛絊電圧を䞊げる必芁がありその埌、MKは5V安定噚から電力を䟛絊される必芁がありたす、トランゞスタスむッチたたは専甚のバッファチップを䜿甚したす。



別の質問は、物理センサヌアナログコンパレヌタヌの入力をどうするかです。 十分な長さ30センチメヌトルで十分のワむダに接続できたす。MKの入力抵抗は非垞に高く、電磁干枉により入力電圧が倉化し、必芁なランダムパルスが䜜成されたす。 デバむスにUSBデスクトップミニクリスマスツリヌのお土産を䜿甚する堎合、入力はUSBバスデヌタラむンに再床接続できたす。



All Articles