Skip to main content
6 of 6
Removed the **edit**, since that link to GitHub results in a “404 Not Found”.
e-sushi
  • 18.1k
  • 12
  • 85
  • 235

Can I construct a feasible stream cipher out of HMAC and a secure hash algorithm?

I have constructed a stream cipher from a secure hash algorithm and a HMAC. Here is a brief description of the algorithm:

Let: (Actually Objective-C styled pseudo code)

  • [data SHA512Hash]: SHA-512 hash of data,
  • [data SHA512HMAC:key]: SHA-512 HMAC of data with key,
  • [data xor:another]: bitwise XOR of two data and another which have the same length,
  • [data bytesTo:index]: first index bytes of data,
  • [data removeFirstBytes:count]: remove first count bytes from data,
  • [data length]: length of data.
  • [data concat:other]: Concatenate other after data.
  • [Data new]: allocate an empty buffer.

Pseudocode: (Or actual Objective-C code?)

Data hkey = [key SHA512]; // Hash to make lengths match.
Data segKey = [IV SHA512];

Data dest = [Data new]; // This will be the output
Data last = (Some constant)

do {
    // Cut off hash-sized chunks of source data
    Data segment = [data bytesTo:[hkey length]];
    [data removeFirstBytes:[hkey length]];

    // Derive a new segment key
    segKey = [segKey SHA512HMAC:hkey]; // or [segKey SHA512HMAC:[hkey concat:last]]? If so, how to decrypt?

    // XOR
    last = [segment xor:[segKey bytesTo:[segment length]]] // Truncates to make length match
    dest = [dest concat:last];
} while ([data length] > 0)

From some other questions I am suggested that this is SHA-512 HMAC running in OFB mode but what about the change in the code comment?

This code seem to decipher itself when given the same key.