¿No es toda la seguridad "a través de la oscuridad"?

43

Sé que uno no debe rely en "oscuridad" para su seguridad. Por ejemplo, elegir un puerto no estándar no es realmente seguridad, pero tampoco suele hacer daño (y puede ayudar a mitigar algunos de los ataques más triviales).

El hash y el cifrado se basan en una fuerte aleatorización y claves secretas. RSA, por ejemplo, se basa en el secreto de d , y por extensión, p , q y ϕ(N) . Dado que estos deben mantenerse en secreto, ¿no es seguro todo el cifrado (y hash, si conoce el vector de aleatorización) a través de la oscuridad? Si no es así, ¿cuál es la diferencia entre ocultar la salsa secreta y mantener el secreto en secreto? La razón por la que consideramos seguro el cifrado (correcto) es porque las matemáticas son irrefutables: es computacionalmente difícil, por ejemplo, factor N para calcular p y q (hasta donde sabemos). Pero eso solo es cierto porque no se conocen p y q . Básicamente están ocultados .

He leído El rol válido de la oscuridad y ¿En qué momento algo cuenta como seguridad? ¿Oscuridad '? , y mi pregunta es diferente porque no pregunto cómo es válida la oscuridad o cuando en el espectro un esquema se vuelve oscuro , sino que pregunto si me estoy escondiendo Todas nuestras cosas secretas no son en sí mismas la oscuridad, aunque definamos que nuestra seguridad se logrará a través de tales mecanismos. Para aclarar lo que quiero decir, las respuestas de la última pregunta (excelente, por cierto) parecen detenerse en "... todavía necesitan descifrar la contraseña", lo que significa que la contraseña aún está oculta para el atacante.

    
pregunta Matt 19.10.2013 - 17:52
fuente

11 respuestas

57

Consulte esta respuesta .

El punto principal es que hacemos una distinción clara entre oscuridad y secreto ; Si debemos reducir la diferencia a una sola propiedad, entonces debe ser mensurabilidad . Es secreto lo que no conocen los forasteros, y sabemos cuánto es desconocido para estos forasteros. Por ejemplo, una clave simétrica de 128 bits es una secuencia de 128 bits, de modo que todas las 2 posibles secuencias 128 tendrían la misma probabilidad de ser utilizadas, por lo que el atacante que intente adivinar dicha clave debe prueba, en promedio, al menos 2 127 de ellos antes de golpear el correcto. Eso es cuantitativo . Podemos hacer cálculos matemáticos, agregar cifras y calcular costo de ataque .

Lo mismo se aplicaría a una clave privada RSA. Las matemáticas son más complejas porque los métodos conocidos más efectivos se basan en factorización de enteros y los algoritmos involucrados no son tan fáciles de cuantificar como Fuerza bruta en una clave simétrica (hay muchos detalles sobre el uso de RAM y el paralelismo o la falta de ellos). Pero eso sigue siendo secreto.

Por el contrario, un oscuro algoritmo es "secreto" solo mientras el atacante no resuelva los detalles del algoritmo, y eso depende de muchos factores: la accesibilidad al hardware que implementa el algoritmo, habilidades en ingeniería inversa, y inteligencia . No tenemos una manera útil de medir qué tan inteligente puede ser alguien. Así que un algoritmo secreto no puede ser "secreto". Tenemos otro término para eso, y eso es "oscuro".

Queremos hacer seguridad a través del secreto porque la seguridad es la gestión de riesgos: aceptamos la sobrecarga de usar un sistema de seguridad porque podemos medir cuánto cuesta usarlo y cuánto reduce. El riesgo de ataques exitosos, y luego podemos equilibrar los costos para tomar una decisión informada. Esto puede funcionar solo porque podemos poner números en los riesgos de ataques exitosos, y esto se puede hacer solo con el secreto, no con la oscuridad.

    
respondido por el Tom Leek 19.10.2013 - 18:25
fuente
15

Creo que el término "seguridad a través de la oscuridad" se usa mal con bastante frecuencia.

La cita más frecuentemente mencionada cuando se habla de seguridad a través de la oscuridad es Principio de Kerckhoffs .

  

No se debe exigir que sea secreto, y debe poder caer en las manos del enemigo sin inconvenientes;

La seguridad a través de la oscuridad se refiere a confiar en mantener el diseño y la implementación de un sistema de seguridad seguro ocultando los detalles a un atacante. Esto no es muy confiable, ya que los sistemas y protocolos pueden ser diseñados por ingeniería inversa y desarmados dado el tiempo suficiente. Además, un sistema que se basa en ocultar su implementación no puede depender de que los expertos lo examinen en busca de puntos débiles, lo que probablemente conduce a más fallas de seguridad que un sistema que ha sido examinado, ha dado a conocer y solucionó los errores.

Toma RSA por ejemplo. Todos en el mundo saben cómo funciona. Bueno, todos los que tienen un buen conocimiento de las matemáticas involucradas de todos modos. Está bien estudiado y se basa en problemas matemáticos difíciles. Sin embargo, dado lo que sabemos sobre las matemáticas involucradas, es seguro siempre que los valores de p y q se mantengan en secreto. Esto es esencialmente concentrar el trabajo de romper (y proteger) el sistema en un secreto que puede ser protegido.

Compare esto con un algoritmo de cifrado que no se suscriba al principio de Kerckhoffs. En lugar de usar un esquema conocido públicamente que usa una clave secreta, este algoritmo de cifrado es secreto. Cualquiera que conozca el algoritmo puede descifrar cualquier dato encriptado con el algoritmo. Esto es muy difícil de asegurar ya que el algoritmo será casi imposible de mantener fuera de las manos de un enemigo. Consulte la máquina Enigma para ver un buen ejemplo de esto.

    
respondido por el Ayrx 19.10.2013 - 18:09
fuente
7

La seguridad tiene que ver con guardar secretos, pero la buena seguridad reside en saber qué secretos puedes guardar y cuáles no.

Y, en particular, los mejores protocolos de seguridad se basan en el principio de factorizar el secreto del diseño, para que su secreto se pueda mantener sin tener que mantenerlo en secreto también. Esto es particularmente importante porque los diseños de sistemas son notoriamente imposibles de mantener en secreto. Este es el núcleo del principio de Kerckhoffs , que se remonta al diseño de antiguas máquinas de cifrado militares.

En otras palabras, si su algoritmo es su secreto, entonces cualquiera que vea una implementación de su algoritmo (cualquiera que tenga su hardware, cualquiera que tenga su software, cualquiera que use su servicio) - ha visto tu secreto. El algoritmo es un lugar terrible para poner tus secretos, porque los algoritmos son muy fáciles de examinar. Además, los secretos incrustados en los diseños no se pueden cambiar sin cambiar su implementación. Estás atrapado con el mismo secreto para siempre.

Pero si su máquina no necesita mantenerse en secreto, si ha diseñado su sistema de manera que el secreto sea independiente de la máquina (alguna clave secreta o contraseña), su sistema permanecerá seguro incluso después de El dispositivo es examinado por tus enemigos, piratas informáticos, clientes, etc. De esta manera, puedes centrar tu atención en proteger solo la contraseña, sin dejar de confiar en que tu sistema no puede romperse sin ella.

    
respondido por el tylerl 20.10.2013 - 08:29
fuente
7

La diferencia crítica está en lo que se mantiene en secreto.

Tome RSA como ejemplo. El principio básico de RSA es la matemática simple. Cualquier persona con un poco de conocimiento matemático puede descubrir cómo funciona RSA funcionalmente (las matemáticas tienen casi medio milenio). Se necesita más imaginación y experiencia para descubrir cómo podría aprovechar eso por seguridad, pero se ha hecho de manera independiente al menos dos veces (por Rivest, Shamir y Adleman, y unos años antes por Clifford Cocks ). Si diseñas algo como RSA y lo mantienes en secreto, es muy probable que alguien más sea lo suficientemente inteligente como para averiguarlo.

Por otro lado, una clave privada se genera al azar. Cuando se realiza correctamente, la generación aleatoria garantiza que es imposible reconstruir el secreto con poder de cómputo humanamente disponible. Ninguna cantidad de inteligencia permitirá a nadie reconstruir una cadena secreta de bits aleatorios, porque esa cadena no tiene una estructura que intuir.

Los algoritmos criptográficos se inventan a partir de la inteligencia, con objetivos ampliamente compartidos (proteger algunos datos, implementar el algoritmo a bajo costo, ...). Hay una buena probabilidad de que las personas inteligentes converjan en el mismo algoritmo. Por otro lado, las cadenas aleatorias de bits secretos son abundantes y, por definición, las personas no crearán la misma cadena aleatoria¹. Entonces, si diseña su propio algoritmo, es muy probable que su vecino diseñe el mismo. Y si comparte su algoritmo con su amigo y luego quiere comunicarse en privado con él, necesitará un nuevo algoritmo. Pero si genera una clave secreta, será distinta de la de su vecino y la de su amigo. Definitivamente hay un valor potencial en mantener una clave aleatoria en secreto, lo cual no es el caso para mantener un algoritmo en secreto.

Un punto secundario sobre el secreto de la clave es que se puede medir. Con un buen generador aleatorio, si genera una cadena de n bits aleatoria y la mantiene en secreto, existe una probabilidad de 1/2 ^ de que alguien más la encuentre en un intento. Si diseña un algoritmo, no se puede medir el riesgo de que alguien más lo descubra.

Las claves privadas RSA no son una cadena aleatoria simple, tienen una estructura, son un par de números primos. Sin embargo, la cantidad de entropía (el número de claves RSA posibles de un tamaño determinado) es lo suficientemente grande como para que sea prácticamente imposible de adivinar. (En cuanto a que las claves RSA son prácticamente imposibles de reconstruir a partir de una clave pública y un montón de texto y texto cifrado, eso es algo que no podemos probar matemáticamente, pero creemos que es así porque muchas personas inteligentes lo han intentado y han fallado. otra historia.)

Por supuesto esto generaliza a cualquier algoritmo criptográfico. Mantenga las cadenas aleatorias en secreto. Publica diseños inteligentes.

Esto no quiere decir que todo se debe hacer público, excepto por la pequeña parte que es un conjunto aleatorio de bits. El principio de Kerckhoff no dice que - dice que la seguridad del diseño no debe depender del secreto de diseño. Si bien los algoritmos criptográficos se publican mejor (y debe esperar aproximadamente una década antes de usarlos para ver si suficientes personas no los han roto), hay otras medidas de seguridad que se mantienen mejor en secreto, en particular las medidas de seguridad que requieren un sondeo activo descifrar. Por ejemplo, algunas reglas de firewall pueden caer en esta categoría; sin embargo, un servidor de seguridad que no ofrece protección contra un atacante que sabe que las reglas sería inútil, ya que eventualmente alguien las resolverá.

¹ Si bien esto no es cierto matemáticamente, literalmente se puede apostar.

    
respondido por el Gilles 19.10.2013 - 18:43
fuente
3

La seguridad a través de la oscuridad generalmente se refiere al principio de Kerchoff , que establece que el sistema debe ser seguro incluso si todo < em> excepto la clave es de conocimiento común. Esto no solo se aplica a la criptografía o generación de textos cifrados. También significa que no debe contar con la generación de URL, contraseñas, hashes, direcciones de memoria e incluso la arquitectura del sistema para que sea secreto. La razón es que algo en el sistema debe ser secreto, y aislar la parte secreta a solo un gran número hace que sea mucho más fácil de usar.

Las razones para proteger la clave, no el algoritmo, son la mayor probabilidad de que el algoritmo se filtre, un mayor número de claves posibles que los posibles algoritmos y el mayor costo de una fuga. El algoritmo es muy fácil de filtrar. Los algoritmos supuestamente clasificados y los secretos de hardware se filtran todos los días, por ejemplo:

  • Un pirata informático que roba su código fuente
  • Hacer que su algoritmo esté disponible para pentesting o que los investigadores revisen.
  • Ingeniería inversa de su algoritmo por cualquiera que obtenga el software / hardware
  • ingeniería inversa de su algoritmo por cualquiera que también use el algoritmo
  • Antiguos empleados descontentos o malintencionados que filtran el algoritmo
  • Adivinación de fuerza bruta, ya que suele ser mucho más fácil adivinar un algoritmo inseguro que adivinar una clave de 256 bits.

Revelando su algoritmo a los investigadores presenta un Catch-22. No puede argumentar que un método secreto es seguro sin revelarlo , momento en el que ya no es secreto ni seguro. Es por eso que segregamos la parte secreta de nuestros algoritmos. Usted puede mostrar que el uso de su método no revela una clave secreta.

Una fuga o una nueva clave también es muy costosa cuando el algoritmo es parte del secreto. Para mantenerse por delante de los atacantes, debe rediseñar y actualizar cada uso del algoritmo con algo nuevo. Es posible que incluso tenga que cambiar el "secreto" cada pocos meses si está operando un sistema muy seguro. Es mucho más fácil reemplazar la clave en un algoritmo seguro que reemplazar todo el algoritmo , especialmente cuando se trata de hardware, compatibilidad con versiones anteriores o actualizaciones a los clientes.

La idea aquí es que cada sistema seguro tiene un secreto. Siempre que genere algo, no quiere que un pirata informático pueda revertir o adivinar sin saber un secreto, es una buena ingeniería:

  1. Haga que el conocimiento secreto sea fácil de cambiar o reemplazar.
  2. Asegúrese de que el secreto en sí es difícil de deducir de las entradas y salidas
  3. Asegúrese de que el secreto sea lo suficientemente complejo como para que no pueda ser adivinado

Si construyo una caja que toma un número y escupe otra (o toma una semilla y escupe valores "aleatorios", etc.), entonces alguien construye una caja idéntica, ahora tengo que cambiar mi caja. Si todo lo que tengo que cambiar en mi casilla es cambiar un número de 256 bits, me ahorra mucho tiempo y esfuerzo. Del mismo modo, si quiero vender estas cajas, cada una tiene que ser diferente. Cambiar el algoritmo para cada caja que vendas, en lugar de cambiar una clave aleatoria para cada caja, sería un diseño ridículamente malo.

Finalmente, vale la pena entender que la seguridad a través de la oscuridad y el "enrollar tu propio criptografía" se encuentran con frecuencia juntos. No enrolle su propio criptografía. Cambiando secretamente su criptografía. La ganancia de secreto se ve comprometida por una pérdida de seguridad. Al hacer rodar su propio dispositivo de cifrado, es muy posible que su sistema trillones o incluso 2 ^ (número grande) sea más barato de descifrar, y le garantizo que un atacante no hará un trillón de adivinanzas para descubrir cómo hizo rodar su propio sistema.

    
respondido por el Cody P 11.08.2017 - 22:22
fuente
2

La seguridad a través de la oscuridad significa que la seguridad depende del algoritmo que se mantiene en secreto.

Por ejemplo, si decido usar rot13 para mi cifrado, la seguridad del sistema depende de que me asegure de que nadie más sepa el algoritmo que estoy usando. Finalmente, la responsabilidad está en mí para determinar qué tan fácil es el algoritmo.

Un problema importante es que no puedo distribuir este sistema, porque cualquiera puede simplemente aplicar ingeniería inversa al algoritmo y usarlo para romper mi cifrado. Además, si el código está comprometido, también lo está todo lo demás.

Un protocolo que se basa en la seguridad por oscuridad generalmente se puede descifrar analizando la salida también. (Por supuesto, uno puede diseñar algoritmos que no sean propensos a esto; lo más fácil es tomar el algoritmo RSA y los pares de claves de código duro, creando de manera trivial un algoritmo de "seguridad por oscuridad"). Uno no debe confiar en que el algoritmo eventualmente no será adivinado.

Por otra parte, si uso RSA para el cifrado, puedo hacer que cada instancia genere su propio par de llaves, y así el programa puede distribuirse sin temor. Puedo proteger las claves para que no se vean comprometidas por dispositivos de hardware especiales que contienen la clave y pueden cifrar mensajes pero no tienen la capacidad de escupir la clave. Además, al ser un protocolo conocido públicamente, muchas, muchas personas han analizado el protocolo en busca de agujeros de seguridad; Puedo confiar en que los mensajes cifrados no se pueden descifrar. Sabemos que las claves no se pueden adivinar porque la probabilidad está de nuestro lado.

Esto no es seguridad por oscuridad. Esto es seguridad a través del secreto. El algoritmo es público, solo hay un "secreto" (la clave) que se mantiene en secreto.

    
respondido por el Manishearth 19.10.2013 - 21:32
fuente
1

Como han dicho otros, la oscuridad realmente se refiere a la implementación.

Déjame dar un ejemplo. Supongamos que usted y su pareja tienen una libra de pepitas de oro en su casa que desea asegurar, pero no están de acuerdo en cómo ...

Uno de ustedes tiene un genio, que puede ordenar para incinerar a cualquiera que se encuentre a 5 pies sin dar una contraseña.

Uno de ustedes quiere ocultar las pepitas en el tubo de desagüe del fregadero de la cocina, diciendo que el desagüe seguirá funcionando y que nadie pensaría en mirar allí. Este método se ha utilizado con todos los socios anteriores y aún no ha fallado.

Tanto la contraseña como la ubicación son "secretas", pero la ubicación depende de que no miren allí, mientras que la contraseña, incluso si la reutiliza en todas partes, depende de que no la conozcan.

    
respondido por el jmoreno 19.10.2013 - 21:25
fuente
1

Tome una escala deslizante del 1 al 10, 10 es "seguridad compatible con IEEE" y 1 es "bóveda a prueba de cuchillas hecha de capas de franela". "Seguridad a través de la oscuridad" es una frase que se usa para describir un plan de seguridad en el que el valor está entre 1 y 8, según a quién se lo pregunte y el día de la semana, así como el nivel estimado actual de expulsión de masa coronal de Betelgeuse. / p>

En otras palabras, es el resultado de una medición totalmente subjetiva de qué tan cerca de la norma es una política de seguridad, ya que posiblemente nadie pueda saber la diferencia entre los riesgos, durante un ataque de día cero, a un estándar frente a un no plan de seguridad estándar.

    
respondido por el orokusaki 20.10.2013 - 04:23
fuente
1

Creo que la seguridad a través de la oscuridad se puede ver de esta manera:

  

Usted tiene una puerta que se abre girando la perilla de la puerta completamente hacia la derecha   Dirección en lugar de en sentido antihorario. Usted proporciona un ojo de cerradura en el   perilla de la puerta para ocultar el hecho de que no se necesita una llave para desbloquear.

Traducido a la tecnología de la información, creo que esto es similar a implementar una función de seguridad de una manera inusual para desviar a cualquier atacante. Por ejemplo, enmascarar un servidor web como IIS cuando en realidad es Nginx.

La seguridad a través de la oscuridad no es necesariamente una seguridad mala . La clave está en su implementación. Es decir, si es capaz de ejecutarlo de forma coherente sin tropezarse debido a esta característica no convencional que ha implementado.

    
respondido por el Question Overflow 21.10.2013 - 07:19
fuente
0

Mucho texto, para una gran pregunta.

Permítame simplificar la respuesta a esto con una analogía. La oscuridad puede definirse de muchas maneras, todas de acuerdo con las de otro. "Algo difícil de comprender tiene oscuridad".

Observe una puerta, sugeriré que hay 3 maneras de asegurar una puerta. 1. Esconde el manejador (oscuridad, no hay seguridad) 2. Bloquearlo con una llave (seguridad) 3. Oculte el identificador y bloquéelo con una llave (seguridad y oscuridad)

(También puede ocultar el orificio de la llave o la cerradura, en lo que respecta a mi analogía)

Lo que importa es incluso si uno sabe que la puerta necesita una llave, no sabemos cuál, ese secreto o seguridad. Todo el mundo sabe que una manija en la puerta se usa para abrirla, ocultar la manija es simplemente una oscuridad.

Combinados, esos enfoques son en realidad más seguros de lo que son por sí mismos.

    
respondido por el Pedro Rodrigues 11.08.2017 - 15:40
fuente
0

La oscuridad trata de cómo las cosas están seguras, en lugar de qué información se necesita para obtener acceso. En el caso de algo como cambiar puertos, el puerto a utilizar es el medio real de asegurar y también se obtiene fácilmente observando el comportamiento. Cuando se utiliza un algoritmo de código cerrado y se confía en la naturaleza de código cerrado para que sea difícil de entender, la seguridad es la misma para todas las personas que utilizan el sistema. Si lo rompes una vez, lo rompes para todos porque estás dejando un ataque en todo el sistema hasta la oscuridad.

Para algo como una contraseña, es una clave. Sí, esa clave es un secreto "oscuro", pero al conocer una contraseña en particular no se rompe el sistema, se rompe el usuario. La seguridad del sistema funciona perfectamente incluso cuando se conoce. Todavía tiene éxito al permitir solo a los usuarios que poseen ese conocimiento y cada usuario puede usar un secreto diferente o cambiar su secreto para permitir el acceso.

Entonces, la diferencia es si está tratando con el secreto del método o el secreto de la clave. Si el método requiere que el secreto sea seguro, se rompe, en su totalidad, tan pronto como se comprometa el método. Si el método no requiere secreto, sino solo información para un uso particular del mismo, entonces proporciona seguridad ya que el alcance de un compromiso se limita a una relación 1: 1 entre el secreto y la información a la que se accede.

Efectivamente, si puede asignar el secreto a una cosa en particular que se está protegiendo y la protección de ese secreto es suficiente si tuviera que sustituir lo que protege, entonces el sistema es lo suficientemente seguro.

    
respondido por el AJ Henderson 11.08.2017 - 16:36
fuente

Lea otras preguntas en las etiquetas