1. Confusion and Diffusion
    1. Confusion
      1. An encryption algorithm mode of operation that uses the principle of confusion well will drastically change the data from the input to the output.
      2. Each binary digit (bit) of the ciphertext should depend on several parts of the key, obscuring the connections between the two.
    2. Diffusion:
      1. Every part of the input affects every part of the output, making analysis much harder.
      2. To change a single bit of the plaintext, then (statistically) half of the bits in the ciphertext should change. Similarly, to change one bit of the ciphertext, then approximately one half of the plaintext bits should change.
      3. Since a bit can have only two states, when they are all re-evaluated and changed from one seemingly random position to another, half of the bits will have changed state.
      4. When the principle of diffusion is used well in an encryption algorithm mode of operation, changing a single character of the input will change many characters of the output.
  2. Algorithm Operation
    1. Serial (Sequential) Algorithm:
      1. This contrasts with both parallelism and concurrency, two distinct, but often overlapping, characteristics of algorithms.
      2. Most standard computer programs are serial (sequential) algorithms, although they are rarely identified as such, because operating in sequence is a default assumption of nearly all computers.
      3. An algorithm that is executed in order, from start to finish.
      4. Security of an algorithm can be increased during software development through:
        1. Parallelization (Parallel Execution)
        2. Concurrency (Concurrent Execution)
        3. Distribution (Distributed Execution)
    2. Parallel Algorithm:
      1. An algorithm which may be broken into component parts, executed separately as many different (unique) processes, and then combined together at the end to get the same result.
      2. Many parallel algorithms are run concurrently, particularly distributed algorithms, (although these are separate concepts).
    3. Concurrent Algorithm:
      1. An algorithm that can be executed concurrently (several computations are executed during an overlapping time period).
    4. Distributed Algorithm:
      1. An algorithm designed to run on computer hardware constructed from interconnected processors.
      2. Distributed algorithms are a sub-type of parallel algorithm, typically also executed concurrently, with separate parts of the algorithm being run simultaneously on independent processors, with limited information about the other parts of the algorithm.
      3. Major challenges in developing and implementing distributed algorithms is coordinating the behavior of the independent parts of the algorithm in the face of processor failures and unreliable communications links.