Proseguiamo e cerchiamo di buttare giù una di quelle regole che dicevo:
4) prendo un capitolo y a caso (ovviamente fisso) del libro che ho scelto
stai affermando che sei in grado si scegliere un capitolo veramente a caso.
Dicendo "a caso" intendevo dire che non aveva particolare rilevanza la scelta di quel capitolo rispetto ad un altro. E' stata una scelta di vocabolo poco felice - se vuoi - ma il concetto era che non aveva rilevanza prendere il primo piuttosto che il secondo o un qualsiasi altro.
Tant'è che poi in seguito dicevo anche:
Come ultima annotazione, in generale fondare la sicurezza sulla segretezza del metodo anzichè sulla generazione veramente casuale del seed/chiave/password non è consigliato.
La pratica di rendere pubbliche le specifiche degli algoritmi deriva dall'accettazione del principio di Kerckhoffs formulato da Auguste Kerckhoffs nel 1880 e conosciuto anche come massima di Shannon. Questo principio afferma che bisogna dare per scontato che l'attaccante conosca perfettamente l'algoritmo crittografico e che quindi la sicurezza del messaggio deve dipendere unicamente dalla bontà della chiave.
Anche nella creazione di una password è meglio che sia chiara e pubblica la procedura di creazione e nello stesso tempo molto sicura la sorgente di entropia da cui si parte. Rendere oscura la procedura sperando di renderla più difficile agli occhi altrui e parallelamente più semplice da ricordare per noi è una strategia che non paga.
Il principio di Kerckhoffs -->
https://it.wikipedia.org/wiki/Principio_di_Kerckhoffs è esattamente opposto al principio che stai applicando tu, detto principio della sicurezza mediante segretezza
https://it.wikipedia.org/wiki/Sicurezza_tramite_segretezzaSono principi noti (li ricordo anche citati in un corso universitario.... ma troppi anni fa!
) però anche nel link che hai postato (
https://it.wikipedia.org/wiki/Principio_di_Kerckhoffs ) viene detto che pur essendo universalmente riconosciuti ci sono anche alcuni distinguo.
Ad esempio copio e incollo una parte (ma ritrovi lo stesso concetto anche più avanti sempre nel link wikipedia):
Considerazioni odierne
Un cambiamento odierno al principio di Kerckhoffs idealizza che la sicurezza di un crittosistema dovrebbe dipendere esclusivamente dalla segretezza della chiave e da un randomizzatore privato. Si può dire dunque che un metodo per decifrare e trasmettere informazioni segretamente dovrebbe essere sicuro anche se tutti sono a conoscenza del suo funzionamento. Sicuramente gli attaccanti hanno più familiarità col sistema in questione, ma mancheranno di conoscenza quando dovranno approcciarsi con tutte le possibili istanze che gli vengono presentate dal sistema.
Alcuni crittografi non sono d'accordo con questo e controbattono sul fatto che Kerckhoffs sentisse la necessità di mantenere segreta la chiave. Un altro fattore discordante è dato dal fatto che non si è sicuri della contrarietà di Kerckhoffs al mantenere "segreti" altri componenti del sistema di crittografia (tabelle, protocolli, algoritmi, ecc.) fintanto che il sistema rimane "indecifrabile".
E così via.
La sintesi di questo è che ci posso essere "altre vie" per ottenere lo stesso livello di sicurezza rispetto all'assolutezza del principio di k.
Mi spiego riprendendo il metodo che descrivevo ieri.
Ipotesi a) rendo pubblico il metodo di calcolo (algoritmo) in ossequio al principio di k
Se facessi questo, la pwd che avessi scelto con il metodo descritto ieri verrebbe "indovinata" in pochissimi secondi perché anche a fronte di una base dati non piccola (26 TB), fissati y e x mi basterebbe applicare una scansione lineare e usare un banale algoritmo di pattern matching per trovare la pwd davvero in pochi secondi.
Oltre tutto - cosa ancor più grave - la ricerca sarebbe lineare quindi se anche aumentassi il db sottostante (quello dei 26 TB) la pwd la troverei comunque con un aumento di tempo lineare, quindi in questo caso irrisorio.
Perciò se rendessi noto l'algoritmo, per mantenere la sicurezza dovrei complicarlo un po' e introdurre altre variabili scelte da me, quindi non più solo libro + y + x ma nuove variabili aggiuntive (che lascio alla fantasia, l'importante sarebbe il loro numero, non la regola nel definirle).
In questo scenario quindi la sicurezza deriverebbe dal fatto che pur essendo noto l'algoritmo, aumentando le variabili in gioco riuscirei ad aumentare il tempo di calcolo (brute force o analisi statistica) in modo da rendere
nel concreto impraticabile la ricerca della pwd.
Certo in questo caso mi allontanerei un po' da quello che era lo scopo iniziale di non voler memorizzare le parole del seed ma di dover ricordare una regola e pochi valori di variabili, perché questi pochi valori potrebbero non essere più "così pochi" come avevo desiderato.
Certamente però aumentando queste variabili riuscirei ad arrivare ad un insieme tale (senza crearne 20, ovvio!) da rendere impraticabile il calcolo a forza bruta.
Vediamo invece l'
Ipotesi b) NON rendo pubblico il metodo di calcolo (algoritmo)
in questo caso invece mi basterebbe tenere la semplice regola che dicevo ieri, o al più aggiungere un'ulteriore variabile per rendere impossibile qualsiasi attacco brute force. E con impossibile intendo proprio impossibile, o almeno l'"impossibile" che tutti noi accettiamo quando affidiamo (consapevolmente) la sicurezza dei Btc non alla certezza matematica del fatto che io non possa trovare una tua k privata, ma al calcolo delle probabilità che dice che io ho una probabilità talmente bassa di indovinare quella k da rendere per te "certa" la possibilità di mantenerne il controllo esclusivo.
Da cosa nasce questa sicurezza? beh dal fatto che se l'algoritmo non fosse noto, fin da subito un attaccante dovrebbe partire con un insieme di combinazioni tali da rendere impossibile un attacco su una base dati di 26 TB (attenzione questo è un fattore fondamentale perché se la base dati fosse piccola il discorso cadrebbe).
Cosa intendo con "rendere impossibile un attacco"? intendo che sarebbe impossibile con gli attuali sistemi di computer (quindi escludendo quantum e quant'altro possa essere fronte di ricerca) in qualsiasi scala/dimensione possa cercare di portare l'attacco. Non sarebbe possibile.
In senso assoluto non sto qui a discutere sulla bontà del mio metodo rispetto a quello che proponi (non è mica una sfida!
) o rispetto a quello che la letteratura suggerisce oggi di fare: ad esempio per creare un wallet esistono metodo noti e consolidati... quindi dico: usiamo quelli, non voglio mica riscoprire l'acqua calda!
Però per altre necessità - come appunto il creare una pwd anche per cose importanti da proteggere - io non vedo particolari problemi nel farlo con metodi alternativi (i.e. "il mio") a patto di scegliere con oculatezza il metodo. E quando dico con oculatezza intendo dire che se seguissi quello descritto e non rendessi noto il metodo, OGGI non ci sarebbero santi in grado di indovinare la pwd (salvo rapirmi per farmi "cantare", ma questo è un altro film....).
(interessante il metodo che hai descritto e molto utile il link che descrive bene nel grafico il processo bip39 )