No se puede basar la seguridad de un programa en el secreto de los algoritmos utilizados o de su implementación (el secreto se debe aplicar a las claves privadas). Aunque parezca paradójico, es más seguro poner a disposición pública el código fuente de un programa que mantenerlo en secreto. Abrir el código supone exponer sus vulnerabilidades y parecería que es mejor que los delincuentes no puedan verlas, que no les demos esa ventaja.
Sin embargo, hay que tener en cuenta que los delincuentes buscan vulnerabilidades de dos formas: (a) ejecutando el programa, proporcionándole datos “problemáticos” y analizando los resultados o (b) buscando patrones en el código fuente. En el primer caso no se requiere los fuentes y en el segundo se pueden obtener mediante un des-compilador (suficiente para buscar vulnerabilidades, aunque no para entender y modificar la funcionalidad de un programa).
Una vulnerabilidad no conocida es una espada de Damocles. Puede que alguien la descubra y no lo divulgue, con objeto de sacarle partido en su propio provecho. Por eso es positivo difundir información sobre las vulnerabilidades en los canales públicos, porque los delincuentes ya disponen de la información y la distribuyen por sus canales. De esta manera, al menos los defensores tienen igualdad de oportunidades.
Cuando el código está a la vista, los desarrolladores tienden a escribir código más cuidado y elegante (la comunidad puede ser muy cruel) y a utilizar estándares, lo que elimina en gran medida el riesgo de introducir errores. De hecho, cuando un programa pasa de cerrado a abierto, durante un tiempo, las vulnerabilidades antes ocultas quedan expuestas. Pero, poco después, se corrigen, dando como resultado un programa más seguro.
Una organización realmente preocupada por su seguridad, debería tener acceso al código de sus programas críticos para poderlos auditar.