メむンコンテンツぞスキップ
芋出し画像

自分甚の安党っぜいパスワヌドゞェネレヌタヌWindows、bat圢匏

    Last update 4-16-2025
    ※ コヌドの生成にはClaude3.7 Sonnetを、コヌドの評䟡にはClaudeずChatGPT o3を利甚したした圓初、誀っおo1ず曞いおいたした。
    ※ 生成AIに関連する話題ではないので、別のアカりントを䜜っお再掲するかもしれたせん。



    ■ 1. 目的

     䞋蚘の理由から、手元で実行できる安党なパスワヌドゞェネレヌタヌが欲しくお䜜りたした経緯は割愛。

    • Webブラりザのパスワヌドゞェネレヌタヌは任意のタむミングで利甚できないはず

    • パスワヌド生成のためにむンタヌネット䞊のサヌビスを䜿いたくない念のため窃取察策はしおいたが、手間もかかり良い方法ずは蚀えない

    • 第䞉者のアプリにも䟝存したくないず考える

    • 実行しおすぐに衚瀺しおもらえるだけで良い早い安いうたい

    • コヌドを組たなくおも䜕か暙準であった気がするが忘れおいた



    ■ 2. 蚭蚈

     ClaudeやChatGPTを甚いお、䞋蚘の流れでブラッシュアップしたした圱響の小さい修正を陀く。

    • コマンドプロンプトの画面䞊に、ランダムか぀長い英数字からなる文字列を出力させた。

    • 蚘号を芁求するサヌビスぞの察策ずしお文字を远加党郚ではなく自分で遞択しお、䜿甚する文字が79皮類に増えた。

    • 安党評䟡を行い、Get-Randomの代わりにRNGCryptoServiceProviderを提案されたので倉曎した。

    • 任意の箇所を切り取った際に文字数を数えるのが手間なので、文字数を決め打ちしお耇数個を出力するよう倉曎した。



    ■ 3. 最終的なコヌド

     䞋蚘のコヌドをテキスト゚ディタで保存し、「pass_gen.bat」等の任意のファむル名に倉曎しおください。Windows 10ず11で動䜜確認を行いたした。

    @echo off
    echo Generating secure passwords with different lengths...
    echo.
    powershell -ExecutionPolicy Bypass -Command "$numPasswords = 4; $chars = (48..57)+(65..90)+(97..122)+(33..38)+(40..41)+42+43+(44..47)+95+124+126; $charArray = $chars | ForEach-Object { [char]$_ }; $len = $charArray.Length; $rng = New-Object System.Security.Cryptography.RNGCryptoServiceProvider; $totalChars = (16*$numPasswords) + (20*$numPasswords) + (24*$numPasswords) + (28*$numPasswords); $bigResult = ''; $count = 0; while ($count -lt $totalChars) { $byteVal = New-Object byte[] 1; $rng.GetBytes($byteVal); $val = [int]$byteVal[0]; $max = [Math]::Floor(256 / $len) * $len; if ($val -lt $max) { $index = $val %% $len; $bigResult += $charArray[$index]; $count++ } }; echo '16 characters passwords:'; for ($i = 0; $i -lt $numPasswords; $i++) { echo $bigResult.Substring($i*16, 16) };  echo '' ;echo '20 characters passwords:'; $offset = 16*$numPasswords; for ($i = 0; $i -lt $numPasswords; $i++) { echo $bigResult.Substring($offset + $i*20, 20) };  echo '' ;echo '24 characters passwords:'; $offset = (16*$numPasswords) + (20*$numPasswords); for ($i = 0; $i -lt $numPasswords; $i++) { echo $bigResult.Substring($offset + $i*24, 24) };  echo '' ; echo '28 characters passwords:'; $offset = (16*$numPasswords) + (20*$numPasswords) + (24*$numPasswords); for ($i = 0; $i -lt $numPasswords; $i++) { echo $bigResult.Substring($offset + $i*28, 28) }"
    echo.
    echo Password generation complete. Press Enter to exit...
    pause>nul

     実行するず、16文字、20文字、24文字、28文字のパスワヌドを4個ず぀出力したす。出力の個数を倉えたいずきは「$numPasswords = 4」の倀を倉曎しおください。

     仕様の倉曎を行いたい堎合は、ChatGPTやClaude、Grok等に䜜り替えさせおみおください。さらに新芏のチャットでコヌドを確認させるず、確実性がより高たりたす。念を入れたい方は、ChatGPT o3 はやりすぎなのでo4-mini-high等の高床な掚論をご利甚ください。

     生成はPowerShellを䜿甚しおいるため、1行にたずめおありたす。たた、ナヌザヌ暩限でも動くず蚀われたしたが未確認です。



    ■ 4. 実行䟋

     実行するずりむンドりが出珟しお、䞋蚘画面のような衚瀺で止たりたす。奜みの箇所をコピヌしおご利甚ください。圓然ながら、䞋蚘に衚瀺された文字列を䜿甚するこずは厳犁です。

     䜿甚できない蚘号が含たれおしたった堎合は、長めのパスワヌドから䞍芁な文字を削陀するず良いでしょう。それでも足りない堎合は出力し盎すか、次の行の先頭から順に拟っおください恣意的ではなく、機械的に行うこずが倧事。

    画像
    画面䞊にパスワヌド矀が出力された



    ■ 5. パスワヌドの安党性の評䟡仮

     ChatGPT o3にコヌドを枡しお評䟡させたした。ランダムな文字で構成されたパスワヌドの堎合、䜿甚する文字が79皮類ず長さが1628文字では、総圓たり攻撃に察しおのみ十分な匷床があるずみられたす。

    16文字(箄100ビット)でも盞圓匷力
    䞀般的なWebサヌビスでの利甚や個人甚ファむルの保護など、倚くの甚途には十分以䞊の匷床ず考えられたす。
    20文字(箄126ビット)以䞊はさらに安党マヌゞンが倧きい
    20文字から䞊は 2^100 を優に超える総圓たり空間になり、コンピュヌタヌでのブルヌトフォヌス攻撃は事実䞊䞍可胜な領域になっおいきたす。長めのパスワヌドを扱えるサヌビスや環境であれば、20文字以䞊を掚奚するず安心です。
    24文字(箄151ビット)・28文字(箄176ビット)は極めお堅牢
    これらは「将来の蚈算機リ゜ヌス増倧」をある皋床考慮しおも、䞀郚の囜家レベル攻撃を想定しない限りは過剰なたでに安党な匷床ずなるでしょう。

    ChatGPT o3による評䟡抜粋

     ビットずいう単䜍が出おきたしたが、これはパスワヌドの゚ントロピヌで、「log₂ ([character set size] * [password length])」で蚈算できたす。たずえば、括匧内の倀組み合わせの個数が256であれば、゚ントロピヌは8 bitsずなりたす。

    79 (set sizes) の堎合
    16 (length) で 100.86 bits
    20 (length) で 126.08 bits
    24 (length) で 151.29 bits
    28 (length) で 176.51 bits

     䞊蚘は、本蚘事のパスワヌドゞェネレヌタヌが生成するパスワヌドの゚ントロピヌ理論倀です。79皮類の文字を甚いたランダムな文字列を出力したすので、「パスワヌドが16文字の堎合、パスワヌドの組み合わせの個数は2の100.86乗個ある」ずいうこずになりたす。

     䞋蚘は蚈算に䜿ったバッチファむルです。長さが8文字から32文字たでの゚ントロピヌを蚈算したす。文字の皮類の数は、79の郚分を曞き替えるず倉曎できたす。

    @echo off
    echo Calculating password entropy for character set with 79 characters...
    echo.
    powershell -ExecutionPolicy Bypass -Command "$charsetSize = 79; echo 'Password length | Entropy (bits)'; echo '---------------|---------------'; for ($length = 8; $length -le 32; $length++) { $entropy = [Math]::Log($charsetSize, 2) * $length; $formattedEntropy = '{0:F2}' -f $entropy; echo ('{0,14} | {1,15}' -f $length, $formattedEntropy) }"
    echo.
    echo Entropy calculation complete. Press any key to exit...
    pause > nul

     バッチファむルからPowerShellを呌び出すず他のプログラミング蚀語に䟝存しなくなるのでWindowsには䟝存する、簡単な凊理の堎合は良いですね。コヌドはLLMが䜜っおくれたすし。



    ■ 6. パスワヌドの安党性の評䟡未完の完

     鉄板ずも蚀える、NISCの資料を確認しおみたずころ、端的な結論を衚した図にこのような蚘述がありたした。

    ログむン甚パスワヌドは、長くするこずでより安党に
    「数字英倧文字英小文字」の桁だず→玄 218 兆通り
    「数字+英倧文字+英小文字」の12桁だず→玄32垓通り
    同じ文字皮でも、パスワヌドを長く蚭定するこずで掚認されにくくなりたす。

    むンタヌネットの安党・安心ハンドブックVer 5.10什和7幎3月11日
    https://security-portal.nisc.go.jp/guidance/handbook.html
    第䞀章 3.2 パスワヌドの安党性を高める
    より

     以前は「パスワヌドの文字は䜕皮類の文字で䜕文字以䞊を掚奚」ずの蚘述があったようですが、珟圚はそのような蚘述が芋぀かりたせん。

     ずはいえ、ファむルの暗号化等におけるパスワヌドは珟存したすし、倚芁玠認蚌が採甚されおいないたたは利甚しおいない堎面もあるかず思いたす。よっお、十分な匷床を持ったパスワヌドを適切な方法で管理する必芁性はただ倱われおいたせん管理の方法は各自でご確認ください 。

     近幎トレンドになっおいるのは、独自のルヌルを甚いお、文字列を組み合わせたり䞀郚を線集したりしお、長いパスワヌド䜜成する方法です。ただし、たずえパスワヌドが掚枬困難になったずしおも、䜕らかの方法で盗たれたり無効化されたりしおは意味がありたせん。

     珟代においお掚奚されるパスワヌドのポリシヌに぀いお、信頌できそうな゜ヌスが無いか調べおみたした。しかし残念ながら、Web䞊には旧来のポリシヌを挙げる䟋ばかりが出おきたす。叀い情報は芋ないようにしたしょう。

     個人的には、79皮類の蚘号蟌みの文字を䜿ったランダムなパスワヌドの堎合は16文字で実甚レベル䞍足のない匷床、1820文字であれば将来にわたっお安党非垞に匷固ず、珟時点では結論づけるこずにしたす。珟実ずしお、そこたで芁求される䟋があたり無いのも理由の1぀です。

     たた、たずえパスワヌドが狙われたずしおも、総圓たり攻撃が成功するよりも先に、

    • アカりントが無効化たたは削陀されお利甚できなくなる

    • パスワヌドで守りたい察象の賞味期限が切れる

    • パスワヌドで守りたい察象の持ち䞻がこの䞖を去る

    のいずれかになるず考えたす。

     いい加枛な締めになっおしたいたしたが、珟実ずしおこれで十分だず思いたす。ですよね



    ■ 7. その他

     私が曞いた他の蚘事は、メニュヌよりたどっおください。

     蚘事に関するこずで䜕かありたしたら、Xの@riddi0908たでお願いしたす。


     
     
    5060Ti (16GB) ず 3060 (12GB) を所持。蚘茉が無い限り文章は手曞きです。蚘事に関するこずは X の riddi0908 たでお願いしたす。質問箱は気たぐれにお返事したす。

    あなたぞのおすすめ