Recentemente ho crittografato di nuovo la mia chiave privata SSH per usare il nuovo formato OpenSSH con molti round KDF ( -o -a 200
) (impiega circa 2 secondi per funzionare sulla mia CPU). Sfortunatamente, ho digitato male la mia frase segreta esattamente nello stesso modo su entrambi i prompt. Immaginai che fosse un singolo scambio di due personaggi adiacenti e scrissi un semplice script python che producesse un elenco di tutti i singoli swap a singolo carattere adiacente. Quindi ho copiato ogni supposizione nel prompt di ssh-keygen
password fino a quando non ha sbloccato la chiave e mi ha permesso di reimpostare la password. Ci sono voluti diversi minuti, ma ci sono riusciti.
Se l'errore fosse stato più complesso (2 swap, slittamento della tastiera, ecc.) questo sarebbe diventato molto noioso. C'è un modo semplice per testare automaticamente le mie ipotesi? Questo non avrebbe bisogno di uno strumento di cracking delle password ottimizzato a pieno titolo poiché sto generando personalmente le password candidate e testerei solo alcune migliaia di possibilità al massimo. Ho trovato il piping della password candidate in ssh-keygen -y -f .ssh/id_rsa
, ma questo non ha funzionato come previsto input da un terminale. Ho anche provato John The Ripper, ma funziona solo con i vecchi file di chiavi private SSH codificati PEM.
Accetterò anche le risposte che mi consentono di testare la passphrase da Python, purché sia compatibile con il nuovo formato OpenSSH.
(per i curiosi, ecco lo script che ho usato):
#!/usr/bin/python3
import getpass
source=getpass.getpass()
def swap(s, i, j):
l=list(s)
l[i], l[j] = l[j], l[i]
return "".join(l)
for (i,c) in enumerate(source):
if i < len(source)-1:
print(swap(source, i, i+1))