## About SHA256 hash

SHA-256 (Secure Hash Algorithm 256-bit) is a cryptographic hash function belonging to the SHA-2 family, designed by the National Security Agency (NSA) and published by the National Institute of Standards and Technology (NIST) in 2001. It is widely used for secure hashing in various applications, including digital signatures, certificates, and data integrity checks.

### Characteristics of SHA-256

**Fixed-Length Output**:- SHA-256 produces a fixed-length output of 256 bits (32 bytes), regardless of the input data's length.

**Input Padding**:- The input message is padded so that its length is congruent to 448 modulo 512. Padding involves appending a single '1' bit, followed by '0' bits until the message length is 64 bits short of a multiple of 512. The length of the original message (before padding) is appended as a 64-bit integer.

**Processing in Blocks**:- SHA-256 processes the input message in 512-bit (64-byte) blocks.

**Initialization Vector (IV)**:- SHA-256 starts with a predefined initial state composed of eight 32-bit words:
- H0 = 0x6A09E667
- H1 = 0xBB67AE85
- H2 = 0x3C6EF372
- H3 = 0xA54FF53A
- H4 = 0x510E527F
- H5 = 0x9B05688C
- H6 = 0x1F83D9AB
- H7 = 0x5BE0CD19

- SHA-256 starts with a predefined initial state composed of eight 32-bit words:
**Compression Function**:- The SHA-256 compression function consists of 64 rounds of processing for each 512-bit block. Each round involves different logical functions, constants, and message schedule operations:
- Logical functions include bitwise operations (AND, OR, XOR, NOT), additions, and shifts/rotations.
- Constants are derived from the first 32 bits of the fractional parts of the cube roots of the first 64 prime numbers.

- The SHA-256 compression function consists of 64 rounds of processing for each 512-bit block. Each round involves different logical functions, constants, and message schedule operations:

### Algorithm Steps

**Initialization**:- Initialize the state variables (H0 to H7) to the predefined values.

**Padding**:- Pad the input message according to the specified padding rules.

**Processing**:- Divide the padded message into 512-bit blocks.
- For each block, perform the 64 iterations of the compression function, updating the state variables.

**Output**:- After processing all blocks, concatenate the state variables to produce the final 256-bit hash value.

### Security and Usage

**Security**:**Collision Resistance**: SHA-256 provides strong collision resistance, making it difficult for two different inputs to produce the same hash output.**Preimage Resistance**: SHA-256 is resistant to preimage attacks, making it computationally infeasible to find an input that hashes to a given output.**Second-Preimage Resistance**: SHA-256 also offers strong resistance to second-preimage attacks, ensuring that it is difficult to find a second input with the same hash as a given input.- Overall, SHA-256 is considered highly secure and is recommended for a wide range of cryptographic applications.

**Usage**:- SHA-256 is used in various security protocols and applications, including SSL/TLS certificates, digital signatures (e.g., in Bitcoin and other cryptocurrencies), secure boot processes, and file integrity verification.
- It is widely adopted in both software and hardware implementations due to its robustness and relatively efficient performance.

### Summary

SHA-256 is a cryptographic hash function in the SHA-2 family that produces a 256-bit hash value. It is known for its strong security properties, including resistance to collisions, preimage attacks, and second-preimage attacks. SHA-256 is widely used in many security-critical applications, including digital signatures, certificates, and data integrity verification. Its robust security and broad adoption make it a preferred choice for modern cryptographic needs.