Il discorso di violare o meno gli algoritmi che ti ho detto non dipende dal fatto che la loro implementazione è pubblica, anzi, questo ne migliora la sicurezza, infatti essendo algoritmi di pubbico dominio la ricerca di debolezze in essi è il passatempo preferito dei maggiori esperti al mondo di crittografia, pertanto se non vengono trovate vuol dire che l'algoritmo è veramente solido.
Le violazioni all'md5 sono fatte con attacchi di tipo forza bruta, ovvero si generano tutte le possibili combinazioni, e per ognuna di esse si calcola l'md5, fino a trovare una stringa che genera lo stesso hash. Se il numero totale di hash possibili è incredibilmente alto (nell'md5 2^128), le probabilità che due stringhe abbiano lo stesso hash sono quasi nulle. Pertanto per generare un numero esponenziale di combinazioni il tempo necessario sarà incredibilmente alto. Il fatto che l'algoritmo sia pubblico non aiuta in nessun modo perchè in questo tipo di attacco non si utilizza in nessun modo l'hash md5 prodotto dall'algoritmo, se non per confrontarlo con gli output dei vari tentativi.
Un esempio, le password sui sistemi unix, sono memorizzate cifrate attraverso l'md5, quando uno di queste password viene scoperta non si fa mai un attacco di forza bruta totale, si fa prima un attacco basato su un dizionario di parole comuni (pensa a tutte le tue password, almeno una volta avrai messo una pass scema, tipo il nome del tuo cane o della tua ragazza), poi si provano quelle composte da sole lettere minuscole (circa 400 miliardi), e cosi via. In tutto ciò non viene affatto violato l'md5 semplicemente si fa una ricerca passando dalle possibilità più ovvie a quelle meno ovvie. Una password del tipo 'ciaociao' verrà trovata in poche ore, mentre una password del tipo '£%As9"vj-' non sarà mai trovata.
Questo per quanto riguarda l'md5, che tra parentesi non è un algoritmo per crittografare, ma è una funzione di hash one-way.
Per quanto riguarda gli algoritmi a chiave (pubblica o simmetrica che sia), per violarli è necessario individuare la chiave, anche qui si può procedere per tentativi, ma se la chiave è sufficientemente lunga (1024bit o più) i tempi per generare tutte le chiavi possibili sono ancora più alti.
Algoritmi impossibili da violare non ne conosco, conosco solamente una tecnica chiamata crittografia quantistica che impedisce gli attacchi di tipo forza bruta semplicemente perchè la chiave usata per cifrare il messaggio è lunga quanto il messaggio stesso, pertanto se si manda un messaggio di soli 20kb il tempo necessario per tentare tutte le possibili combinazioni sarebbe miliardi di volte più lungo dell'età dell'universo. Tale tecnica è però ancora in fase di studio, e comunque viene realizzata attraverso apparecchiature hardware che hanno a disposizione solamente in pochissimi laboratori di ricerca.
Tutte le altre tecniche sono potenzialmente violabili.
Per quanto riguarda il discorso di non diffondere i sorgenti basta pensare a Microsoft, il codice sorgente di Windows è blindato e nessuno vi ha accesso, eppure vengono scoperte 3-4 nuove vulnerabilità al mese.
Al contrario Apache, il cui codice è disponibile su internet, ha molte meno vulnerabilità di IIS.