Take the 2-minute tour ×
Cryptography Stack Exchange is a question and answer site for software developers, mathematicians and others interested in cryptography. It's 100% free, no registration required.

To obfuscate data I made up this method on the spot without planning since the goal wasn't real encryption.

At first I though this cannot be real encryption but after revisiting the code and reading on block symmetric encryption, and including R in the method, it seems that it is( looks like a stream cypher, OFB specifically ).

The method is the following( pseudo code ):

-Hash function parameters, secret key, hash and array elements all have the same size in bits.
-Size is at least 128 bits for this example.
-Using a cryptographic random generator.

H - cryptographic hash function
K - secret key, randomly generated
A - array of plaintext
L - array length
R - randomly generated, is not encrypted and is stored with the resulting encrypted data

keyhash = H(K)
hash = R
for( i , i < L , i++ )
{
    hash = H( hash ^ keyhash )
    A[i] ^= hash
}

Could this be called encryption or it has some fundamental flaws that would break it immediately?

share|improve this question
    
Don't you mean $C_i = A_i \oplus h$? Otherwise you don't have ciphertext ;) –  Maarten Bodewes Jan 7 at 0:10
    
Of course, ^ is XOR in Java as well, but above you've only defined the plaintext. Now it's also the ciphertext after the operation. –  Maarten Bodewes Jan 8 at 16:56

2 Answers 2

Your scheme is indeed an instance of output feedback mode (OFB), using $$(\mathit{key},\mathit{pad}) \mapsto H(\mathit{key}\oplus\mathit{pad})\text,$$ where $\mathit{key}$ corresponds to keyhash and $\mathit{pad}$ to hash, as the "block cipher". (It is very likely not really a block cipher due to lack of bijectivity, but that's not needed for output feedback mode.) When $H$ is a cryptographically secure hash function, the construction should have the same security properties as OFB using a "real" block cipher; however, since hash functions are usually slower than block ciphers, one generally prefers to use the latter.

share|improve this answer
    
@this Is there any specific reason for the unaccept? –  yyyyyyy Jun 7 at 18:44

You are creating a bitstream and XORing it with your plaintext so yes, it is. More precisely, it's a block cipher. Have a look at a previous discussion.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.