Nella tua domanda c'è un equivoco o due.
Come hash di messaggio (file, ecc.), MD5 non è insicuro a causa della "capacità di potenziare la forza e di raccogliere il risultato". Gli hash crittografici dovrebbero avere tre proprietà di sicurezza:
- Un modo: dato un hash, non è possibile trovare un messaggio con quell'hash.
- Integrità: dato un messaggio, è impossibile trovare un altro messaggio con lo stesso hash.
- Resistenza alla collisione: non è possibile trovare due messaggi con lo stesso hash.
L'unica proprietà di MD5 che ora è danneggiata è la terza, resistenza alla collisione. È possibile creare messaggi con lo stesso hash. Tuttavia, per un messaggio che non è appositamente predisposto, è ancora impossibile trovare un altro messaggio con lo stesso hash. Tuttavia, MD5 non è raccomandato, in parte perché è plausibile che saranno presto individuati attacchi migliori per l'integrità della sconfitta e in parte perché molti sistemi che si basano principalmente sull'integrità fanno affidamento sulla resistenza alle collisioni contro alcuni attacchi di alto livello.
Prendere MD5 e modificare l'uscita non aiuterebbe in alcun modo con la resistenza alle collisioni poiché una collisione per MD5 sarebbe anche una collisione per l'hash modificato. Non sarebbe d'aiuto nemmeno per l'integrità, per lo stesso motivo. Quindi la tua proposta non può fare nulla contro i difetti noti di MD5.
Se modifichi un hash MD5, potrebbe diventare più difficile trovare un messaggio con l'hash. Ma solo se la trasformazione che fai è difficile da invertire! Ad esempio, se esegui alcune trasformazioni fisse come capovolgere alcuni bit, è inutile. Se si cripta l'hash, questo potrebbe farlo - o no: dipende dalla proprietà di sicurezza che si desidera ottenere. Ricorda che la proprietà a senso unico per MD5 non è nota per essere interrotta.
Quindi quale proprietà di sicurezza vuoi ottenere?
Se stai usando MD5 come hash password , MD5 non è il tuo unico problema o il tuo problema principale. Per un hash della password, le ricerche di forza bruta sono un problema. Nessuno dei soliti hash message è adatto come hash password , perché sono veloci. Gli hash delle password devono essere lenti , proprio per rendere più difficili le ricerche di forza bruta: colpiscono più duramente l'attaccante rispetto all'utente legittimo, perché l'aggressore deve provare milioni di possibilità. Tweaking MD5 non può forse aiutare lì. Se hai password di hashing, dimentica MD5, anche se lo hai trovato utilizzato in una delle milioni di app PHP in circolazione. Per le password hash, utilizza PBKDF2 , bcrypt o scrypt . Se stai anche pensando di utilizzare qualcosa di diverso da uno di questi tre, leggi Come fare in modo sicuro le password di hash? prima di tutto.
Per un hash della password, l'idea di aggiungere un componente segreto alla funzione di hash è chiamata a pepe . Un peperone comporta una chiave segreta e una vera crittografia - "cambiare alcuni personaggi" sarebbe così facile da invertire che è inutile come un peperone. Il modo normale per includere un pepe è aggiungerlo alla password e al sale quando si calcola l'hash. E ricorda che il pepe deve essere segreto: se si trova nell'origine dell'applicazione, o nello stesso database o negli stessi dischi di backup del database delle password, è inutile.