this is only brute-forceable if you know what to expect
Fermati proprio lì. Quello che stai descrivendo è la sicurezza attraverso l'oscurità. Stai scommettendo che un attaccante non sarà in grado di sapere o indovinare il tuo schema. Questa è un'ipotesi davvero, davvero, davvero terribile. È affascinante, ma più e più volte è stato dimostrato sbagliato. Qualsiasi schema di sicurezza appropriato deve funzionare anche se l'utente malintenzionato conosce il sistema che si sta utilizzando; un utente malintenzionato che sa tutto ma la tua password non dovrebbe essere in grado di attaccare praticamente il sistema.
Quindi, buttando fuori l'ipotesi che un attaccante non conosca il tuo schema: la sicurezza è francamente terribile. In primo luogo, è molto semplice per un utente malintenzionato che impara parte del testo in chiaro a utilizzarlo per recuperare altre parti, perché si aggiunge la stessa cosa a ogni blocco di 64 byte. Un utente malintenzionato che ottiene una tua password può vedere cosa significa averlo in una sezione del significato del testo cifrato; in particolare, se assumono che si trovi nella posizione X, possono sottrarlo dal testo cifrato e ottenere una parte potenziale del keystream, quindi provare quel keystream altrove.
In secondo luogo, il tuo programma è abbastanza vulnerabile alla forza bruta. SHA-512 è un hash estremamente veloce. Gli hash veloci sono grandi, in generale - significano che la tua crittografia è più veloce, il che significa che hai meno spese generali, il che significa che avrai maggiori probabilità di utilizzare cripto ovunque con prestazioni accettabili. Ma sono terribili per le password, perché le password sono quasi invariabilmente di bassa entropia. Con SHA-512, un utente malintenzionato che recupera il file può eseguire il brute-force delle password estremamente rapidamente. Gli hash utilizzati per le password devono essere lenti: la cosa che stai tagliando è bassa entropia, quindi il tuo hash deve impiegare un po 'di tempo per essere eseguito per rallentare. Una GPU può calcolare milioni di hash SHA-512 al secondo; fare la decrittazione è anche veloce, quindi non è adatto a resistere alla forza bruta.
Non dovresti usare questo schema. Piuttosto, dovresti usare la crittografia corretta. Se lo si costruisse da solo, questo sembrerebbe un vero e proprio codice di sicurezza (ad esempio AES in una modalità appropriata), con la chiave derivata da una funzione lenta (ad esempio PBKDF2). Il tuo schema può funzionare? Bene, se la tua password è molto alta entropia, possibilmente - al livello estremo, se la tua password è una stringa veramente casuale a 128 bit, puoi anche usarla direttamente come chiave per AES. Ma la tua password è probabilmente più debole di quanto pensi, quindi dovresti semplicemente usare un hash lento.
Tuttavia, non dovresti farlo neanche . La crittografia è veramente difficile da implementare correttamente. Ove possibile, dovresti usare sistemi sicuri ben collaudati invece di programmare qualcosa da te. Ad esempio, è possibile utilizzare GPG per crittografare il file; potresti anche utilizzare uno strumento di gestione delle password (sono quasi certo che esistano strumenti che non memorizzano nemmeno dati crittografati nel cloud, ma sono interamente locali). Non implementare il proprio sistema ad eccezione della pratica; se lo fai, non utilizzare lo schema qui descritto.
Esaminando
la tua altra domanda , sembra che tu pensi ancora di poter nascondere efficacemente il tuo schema a un utente malintenzionato e fare affidamento su " no, non capiranno cosa sto facendo. " Quindi, ecco qualcosa al di là della (pienamente sufficiente) "sicurezza dall'oscurità non è efficace:" L'unica ragione per preoccuparsi di un hacker che decrittografa il file è che hanno già
hanno il file. Ciò significa che non è riuscito a proteggere un file sul tuo computer. Il tuo programma è anche un file sul tuo computer. Perché pensi di poterlo mantenere sicuro, anche se il file che contiene le password non lo è?