Seguridad por oscuridad. Una pregunta para la cual la respuesta esperada es incorrecta cuando se le da solo la información presentada en el desafío requiere algún conocimiento "secreto" adicional que solo "en" el software tiene. El problema es que el software está en manos de su atacante, que puede descompilarlo para descubrir el secreto. Por lo tanto, esto es muy débil, porque se basa en un secreto estático de baja entropía (el "secreto" es agregar 1 a la respuesta a la pregunta planteada).
Si dos programas deben confiar el uno en el otro, sabiendo que no se puede garantizar al 100% que el otro es quien dice ser y no un impostor, el método habitual es un poco de "verificación independiente"; Si un tercero de confianza dice que este programa es quien dice que es, eso es "evidencia" que puede utilizar para aumentar su confianza.
Los certificados son una forma de esta verificación; un servidor que desee probarse a sí mismo obtiene un certificado de un tercero independiente, cuya información se ha cifrado mediante una clave privada que no se entrega al servidor, pero que puede leer cualquiera que solicite el certificado del servidor, utilizando una clave pública Distribuido de forma independiente por el tercero. Por lo tanto, el servidor (o un atacante que desea imitar esta ubicación) no puede cambiar la información en el certificado, y mientras la información coincida con la ubicación real y los identificadores públicos del servidor, los clientes pueden estar seguros de que el servidor es quien dice que es.
Sin certificados, la mayoría de los sistemas se basan en un modelo de evidencia de "conocimiento cero". Las pruebas de conocimiento cero por lo general todavía requieren algún tipo de tercero, que distribuye las pruebas que los programas utilizan para responder a los desafíos. En el mundo real, este suele ser un servidor de autenticación. La diferencia es que nadie tiene que saber todo sobre el esquema de autenticación, y la información utilizada se puede obtener en tiempo real y, por lo tanto, puede cambiar cada vez que se realiza.
Aquí hay un ejemplo: Alice es saludada por Bob, en quien Alice no confía. Bob dice que conoce a Cindy, y por lo tanto, dice, es confiable. Para probar este hecho, Alice llama a Cindy, que conoce a Alice, y le pide la mitad de un par de claves asimétricas. Luego desafía a Bob a cifrar un mensaje secreto que puede ser descifrado por la clave de Alice. Bob llama a Cindy, que también conoce a Bob, y le da la otra mitad del par de llaves. Bob cifra el mensaje, que Cindy nunca sabe, y se lo da a Alice, que lo descifra con su clave y recibe el mensaje original. Bob no pudo haber cifrado el mensaje correctamente sin saber la otra mitad de la clave, y la única forma en que pudo haberlo obtenido es de Cindy. Cindy, por su parte, nunca sabe el mensaje secreto, por lo que no puede darle el mensaje a Bob para que lo devuelva a menos que Bob le diga (y si Cindy le hubiera preguntado, Bob sospecharía que tal vez Cindy no es quién ella dice que es).
En el mundo real, Alice y Bob serían programas utilizados por los usuarios finales (quizás el mismo usuario final), y Cindy sería un sistema de autenticación central. Los usuarios finales de los dos programas tendrían secretos fuera de línea (nombre de usuario / contraseña) que usarían para autenticarse con el sistema central, y una vez hecho esto, los programas pueden demostrarse que sus usuarios finales son usuarios válidos en el sistema, sin ya sea una aplicación que conoce las credenciales del otro usuario, o el servicio central que conoce el secreto que se pasa entre los dos programas como parte de su saludo.
Para que este tipo de esquema se rompa, un atacante David debe convencer a Cindy de que en realidad es Bob, o también debe tener una cómplice Emily, que debe convencer a Alice de que es Cindy, antes de darle a Bob la otra mitad. de la llave que ella generó para alicia. Cómo sabe Alice que Cindy es realmente Cindy y no Emily, y cómo Cindy sabe que Alice y Bob son quienes dicen, requieren sus propios esquemas con sus propios secretos. Esos esquemas también pueden involucrar a terceros, pero eventualmente te quedas sin terceros; en algún momento, debe confiar en la transferencia de un secreto fuera de línea, como un conjunto de credenciales de usuario, para verificar que alguien es quien dice sin tener que consultar a un tercero.