やりたいこと
手元のiPhoneをみていたら、4桁のパスコードロックはどのくらいで破られるのかが気になりました。
さっと計算すると、「0000」から「9999」まで、10の4乗で10000通りの組み合わせがあるはず。
これをPythonをつかって総当たりしていくと、一体何秒でパスコードを見破れるのかを測ってみました。
「8400rpm。420馬力
あなたがこの文章を読み終える時間で
時速100kmまで加速する。」
10年前くらいの自動車雑誌に掲載されていた、BMW M3クーペの宣伝文句です。
果たしてそれよりも早いのか、遅いのか。
BMW M3クーペと勝負!
背景
・Python初習者です。
・基本的なことは学んだが、どう応用して良いかわからず、仕事で使うわけでもなく、モチベーション低下気味です。
考え方
・4桁のPINコードは、銀行の暗証番号やスマホのロック画面でよく使われる0から9の数字を4桁に組み合わせて使うものを想定。
・PINコードはわからない前提で、ランダム関数を使ってランダムに生成。
・「0000」から「9999」まで総当たりで試していき、マッチした場合に「iPhone unlocked」というメッセージを表示することにする。
コード
from random import randint
import time
pin_n = randint(0, 9999)
def iphone_unlock(pin_n):
for i in range(0, 9999):
print(format(i, '04'))
if i == pin_n:
print(f"PIN is {pin_n}, iPhone unlocked.")
break
else:
print('Process finished.')
start = time.time()
iphone_unlock(pin_n)
elapsed_time = time.time() - start
print(f"elapsed time: {elapsed_time}")
考察
・0000から総当たりでマッチングを試していくので、生成されたPINコードが若い(0000に近い)ほど処理時間は短く、大きいほど(9999に近い)処理時間が長くなる。
・しかし、長くても3秒以内には処理が終わる。
・4桁のパスワードそのものは無防備であることがわかった。