1. The Birthday Problem
    1. The birthday problem describes the probabilistic ease with which certain weak cryptographic functions may be broken.
    2. When an attacker's objective is broadened to find any exploit (a single matching pair) within a set:
      1. With 367 people, the probability that two people share the same birthday is 100%.
      2. With 70 people, the probability that any two people share the same birthday is 99.9%.
      3. With as few as 23 people, the probability that any two people share the same birthday is 50%.
  2. Concepts
    1. The birthday problem is based upon these well-known concepts within the fields of mathematics and probability:
      1. Mutual Exclusivity (Disjoint):
        1. If two outcomes to an event cannot both be true.
          1. P(A) + P(A') = 1
        2. In this case, P(A) and P(A') are mutually exclusive. These events cannot both occur within the same set:
          1. "Two people in the set share a birthday"
          2. "Two people in the set do not share a birthday"
      2. Conditional Probability:
        1. The probability of an event A, given that another event B has occurred.
          1. P(A|B)
        2. This can be rewritten as:
          1. P(A&B) / P(B)
          2. The probability that both events A and B occur, divided by the probability of event B.
          3. The probability of event B must not be 0.
      3. The Pigeonhole Principle:
        1. In mathematics, the pigeonhole principle states that:
          1. N items are put into M containers
          2. If N > M:
          3. At least one container must contain multiple items
        2. Example:
          1. In any group of three gloves, there must be at least two left-hand gloves or at least two right-hand gloves.
          2. N = 3
          3. Number of Gloves
          4. M = 2
          5. Number of Glove Types
  3. Birthday Attack
    1. An attack on a weak hash that attempts to cause a collision.
    2. Given a function f, the goal of the attack is to find two different inputs x_1, x_2 such that f(x_1) = f(x_2). This is called a collision.
    3. The method used to find a collision is simply to evaluate the function f for different input values randomly until the same result is found more than once. Because of the birthday problem, this method can be rather efficient.
    4. Collision
      1. Two inputs to a hash function produce an identical output.
      2. An encryption or hashing function must be sufficiently complex that two inputs are very unlikely to produce the same output. This feature of cryptographic functions is called collision resistance.