5 votos

¿Cuál es la probabilidad de adivinar un código secreto si los intentos son limitados y te detienes al primer éxito?

Hace algún tiempo yo trató de responder una pregunta en Security Stack Exchange, pero me he dado cuenta de que no estoy seguro de haber hecho bien las cuentas, y estoy aquí para pedir ayuda.

El escenario es el siguiente: alguien intenta entrar en la cuenta de otro usuario. Esa cuenta está protegida por una contraseña y por un llamado "segundo factor" (como un código enviado vis SMS, o generado por una app como Google Authenticator), y la hipótesis es que el atacante conoce la contraseña, por lo que la única protección viene dada por este código. Si se trata de un código de 3 dígitos, hay 1000 códigos posibles, y con un solo intento la probabilidad de adivinarlo es $p = \frac{1}{1000}$ . Esto es fácil. El punto en el que estoy atascado es el cálculo de la probabilidad de adivinar el código correcto si tiene más de un intento. Por ejemplo, él puede intentar como máximo 3 veces, y después de que la cuenta se bloquea para la protección, y es el juego terminado. ¿Cuál es la probabilidad de éxito, en ese caso?

Esto es lo que he probado.

En primer lugar, tenemos que establecer si el código correcto es el mismo para los tres intentos, o si cambia cada vez. He explorado ambos casos.

Caso A: el código es siempre el mismo.

Creo que esto se puede modelar con un hipergeométrico variable. Como dice la Wikipedia, es "la probabilidad de k aciertos en n sorteos, sin reemplazo, de una población finita de tamaño N que contiene exactamente K aciertos, en la que cada sorteo es un éxito o un fracaso". En nuestro caso, con N = 1000, K = 1, n = 3, k = 1, es

$$ \require{cancel} P_{Code\,is\,guessed} = \frac{\binom{1}{1} \binom{1000-1}{3-1}}{\binom{1000}{3}} = \frac{\binom{999}{2}}{\binom{1000}{3}} = \frac{\frac{999!}{2!\cdot\cancel{997!}}}{\frac{1000!}{3!\cdot\cancel{997!}}} = \frac{\frac{\cancel{999!}}{\cancel{2}}}{\frac{1000\cdot\cancel{999!}}{3\cdot\cancel{2}\cdot1}} = \frac{3}{1000} $$

Para confirmarlo, he dibujado un árbol con los posibles resultados: en cada nodo hay una suposición. La rama verde corresponde a adivinar el código correcto, la rama roja a no adivinarlo y pasar al siguiente intento (salvo que sea el último): Tree of possible outcomes when the code is the same

La probabilidad de acabar en una determinada hoja es el producto de todas las probabilidades de los nodos intermedios, y la probabilidad de llegar a cualquiera de las hojas "verdes" es simplemente la suma, ya que son eventos independientes. Por lo tanto,

$$ P_{Code\,is\,guessed} = \frac{1}{1000} + (\frac{\cancel{999}}{1000} \cdot \frac{1}{\cancel{999}}) + (\frac{\cancel{999}}{1000} \cdot \frac{\cancel{998}}{\cancel{999}} \cdot \frac{1}{\cancel{998}}) = \frac{1}{1000} + \frac{1}{1000} + \frac{1}{1000} = \frac{3}{1000} $$

Esto se ve bien, porque es el mismo resultado. Estoy bastante seguro de que es correcto. ¿Es correcto?

Caso B: el código cambia cada vez

He intentado aplicar el mismo razonamiento al caso en el que el código cambia en cada intento fallido. Intuitivamente, el hecho de que el código cambie cada vez significa que para su segundo intento el atacante no puede restringir el rango a 999 códigos posibles, sino que tiene que considerar, de nuevo, 1000. Creo que esto corresponde a un distribución binomial donde intenta tener k = 1 aciertos en n = 3 intentos, pero ya tengo mis dudas: si adivinamos el código correcto, nos detenemos inmediatamente, pero creo que el binomio asume que hacemos 3 intentos en cualquier caso, es decir, aunque adivinemos el código correcto en el primer intento, el binomio asume que lo intentamos (y fallamos) 2 veces más.

De todos modos, con $p=\frac{1}{1000}$ , n=3, k=1, la probabilidad es

$$ P_{Code\,is\,guessed} = \binom{n}{k} \cdot p^k \cdot (1-p)^{(n-k)} = \binom{3}{1} \cdot \frac{1}{1000} \cdot (\frac{999}{1000})^{(3-1)} = 3 \cdot \frac{1}{1000} \cdot (\frac{999}{1000})^2 = 0.002994003 $$

De nuevo, para confirmar el resultado, probé a construir el árbol: Tree of possible outcomes when the code changes every time

Y en este caso,

$$ P_{Code\,is\,guessed} = \frac{1}{1000} + \frac{999}{1000} \cdot \frac{1}{1000} + (\frac{999}{1000})^2 \cdot \frac{1}{1000} = 0.002997001 $$

¡que es diferente del resultado anterior, el que obtuve usando el binomio! Esto significa que al menos uno de estos cálculos está mal (y posiblemente ambos), pero no estoy seguro de dónde está el error.

De todas formas el árbol me convence más, y como dije sospecho que el problema es que el binomio no es la opción correcta aquí, porque asume que el atacante siempre hace 3 intentos, y esto no es realista en este escenario.

Así que estas son mis preguntas:

  1. ¿Son correctos mis cálculos para el caso A (el código es siempre el mismo)?
  2. Para el caso B, estoy seguro de que hay un error. ¿Dónde está?

Incluso probé a simplificar el problema a tirar un dado intentando obtener una determinada cara, y si el resultado no es el deseado, tirar una vez más. Creo que el truco podría ser que si la primera tirada tiene éxito no tenemos que añadir la probabilidad de adivinar la segunda tirada, porque simplemente no habrá una segunda tirada. Pero, de nuevo, estoy confundido.

3voto

Para la parte A tienes razón, pero hay una solución más sencilla. Sus conjeturas son tres números diferentes de $1$ a $1000.$ La respuesta correcta es una al azar de las $1000$ números. Cubres tres de ellos con tu respuesta, así que hay un $3/1000$ posibilidad de cubrir la respuesta correcta y una $997/1000$ oportunidad de no hacerlo.

En el caso de B es correcto que se modele como ensayos independientes de bernoulli con $p=1/1000,$ a la que es aplicable la distribución binomial. Y tienes razón en que no queremos la probabilidad de un acierto. Más bien, queremos la probabilidad de una o más adivinanzas correctas, porque aunque sólo necesitas acertar una vez para haber tenido éxito en tu objetivo de adivinar correctamente la contraseña, también debes contar las (muy raras) situaciones en las que aciertas dos o tres veces como aciertos. La forma más fácil de calcular esto es darse cuenta de que es lo mismo que la probabilidad de que no lo hará fallar tres veces seguidas. La probabilidad de fallar tres veces seguidas es $(999/1000)^3$ por lo que la probabilidad de que tenga éxito una o más veces es $$ 1-(999/1000)^3$$ que es lo mismo que tu segunda respuesta a la que llegaste por el árbol.

1 votos

Lo siento, sigo sin entender el caso B. Tu cálculo coincide con el que hice siguiendo el árbol. Esto significa que el otro, basado en la binomial, es erróneo. Pero tú mismo has dicho que la distribución binomial es aplicable. ¿Por qué obtengo entonces un resultado diferente? ¿Estás diciendo que he calculado la probabilidad de exactamente un éxito, pero debería haber calculado la probabilidad de un o más ¿éxitos? Si es así, ¿por qué? No puedo tener más de un éxito, ¡me detendré en el primero! Me parece mal... (Sólo para aclarar: estoy diciendo que parece mal, no es que se es !)

0 votos

@FabioTurati Lo siento, confundí tu solución de árbol como equivalente a la solución binomial en la que sumas las probabilidades de uno dos o tres éxitos porque ambos tienen tres términos... en realidad es mucho más cercana a la solución que di (editaré esa última frase).

1 votos

@FabioTurati Pero no obstante es cierto que puedes obtener la respuesta correcta calculando la probabilidad de uno o más aciertos (en lugar de uno solo)... pruébalo. La distribución binomial te dice la distribución de cuántos aciertos vas a tener en los tres intentos... es decir, asume que vas a hacer todos los intentos. Así que imagina que vas a hacer todos los intentos restantes por diversión, incluso si aciertas en el primero o en el segundo (no tienes que hacer esto en la vida real). Tienes que contar las (pequeñas) probabilidades de acertar dos veces/triunfar porque eso habría sido un resultado favorable.

0voto

Deep Puntos 128

Esta es una forma diferente de calcular la parte B:

Considera la proposición: \begin{align} A_i\equiv\textrm{$i$-th guess is correct, }i\in\{1,2,3\} \end{align}

En lo que sigue la suma de proposiciones indica el O lógico entre ellas y el producto de proposiciones indica el Y lógico entre ellas. $\overline{()}$ indica la negación lógica de la proposición. Dado que se detiene en la primera conjetura correcta, la proposición de que el código se adivina correctamente es $A_1+\bar{A}_1A_2+\bar{A}_1\bar{A_2}A_3$ . La probabilidad de que se adivine el código en uno de los tres intentos, con parada en el primer éxito, es: \begin{align} P(A_1+\bar{A}_1A_2+\bar{A}_1\bar{A_2}A_3)&=P(A_1)+P(\bar{A}_1A_2)+P(\bar{A}_1\bar{A_2}A_3)\quad\textrm{(mutually exclusive)}\\ &=P(A_1)+P(\bar{A}_1)P(A_2)+P(\bar{A}_1)P(\bar{A_2})P(A_3)\quad\textrm{(independence)}\\ &=\frac{1}{1000}+\frac{999}{1000}\times\frac{1}{1000}+\left(\frac{999}{1000}\right)^2\times\frac{1}{1000}\\ &=\frac{2997001}{1000000000}\approx 0.003 \end{align}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X