“Seguro por diseño” es una metodología para crear aplicaciones o sistemas informáticos en los que todos los aspectos del software se desarrollan inherentemente de una manera que dificulta o imposibilita que un usuario malintencionado dañe, ataque o comprometa el sistema. En muchos casos, el software que es seguro por diseño se planifica desde la concepción para cerrar incluso los agujeros de seguridad más pequeños en las funciones elementales y utilizar técnicas clásicas y confiables durante la fase de codificación para garantizar que no se lleven fallas al producto terminado. Algunas de las áreas principales en las que se centra la ingeniería de diseño seguro son las aportaciones del usuario o cliente, las comunicaciones seguras y la validación básica para garantizar que ciertos tipos de ataques se vuelvan imposibles. Aunque ninguna aplicación informática es inmune a todos los ataques maliciosos, un sistema seguro por diseño tiene una clara ventaja sobre los sistemas que utilizan bibliotecas de seguridad externas o dependen de la seguridad de un entorno circundante, como un sistema operativo, porque el diseño del El software está diseñado para prevenir y contener ataques de explotación.
Una de las áreas más vulnerables de cualquier aplicación informática, debido a su naturaleza impredecible, es la entrada del usuario. La entrada que no está validada, se usa sin verificación de errores o se acepta ciegamente de cualquier fuente puede usar el funcionamiento interno de un sistema contra sí mismo para exponer datos confidenciales o hacer que un sistema se bloquee. Cuando una aplicación es segura por diseño, la entrada del usuario generalmente se valida de alguna manera, se verifica en busca de secuencias maliciosas o incluso se convierte a un formato seguro para que pueda procesarse sin preocuparse por el comportamiento impredecible que podría resultar del procesamiento predeterminado de algunas combinaciones de caracteres.
La cuestión de la entrada del usuario se vuelve más compleja en un sistema de diseño seguro cuando el software es un servidor que acepta la entrada de un cliente a través de una red. Algunos atacantes pueden interceptar mensajes válidos de un cliente a un servidor o falsificar un cliente por completo, por lo que generalmente se emplean métodos distintos del cifrado propietario, ya que un atacante que intercepte los mensajes podría romper fácilmente el cifrado. Los métodos de seguridad más efectivos dentro del diseño de un programa incluyen restringir la información que envía un cliente y restringir la capacidad de un servidor o módulo en lo que puede o no puede hacer por sí solo.
Al combinar la modularidad del software con el principio de privilegio mínimo, un sistema que es seguro por diseño puede evitar que los atacantes comprometan completamente un sistema al delegar tareas entre módulos que no necesariamente tienen la capacidad de realizar una sola acción destructiva por sí mismos. De esta manera, se pueden implementar salvaguardas y dispositivos de seguridad que pueden permitir que un sistema se recupere de forma segura de una intrusión. Este concepto es difícil de incorporar en una aplicación que no utiliza principios que son seguros por diseño, porque requiere que toda la arquitectura del programa esté orientada hacia el objetivo de la seguridad.