Reputation
13,631
Next tag badge:
98/100 score
17/20 answers
Badges
1 34 70
Impact
~259k people reached

Jan
30
reviewed Leave Open Merkle hash tree updates
Jan
30
revised Many time pad attack
edited tags
Jan
30
comment How secure is it to use password as AES key?
At minimum it's bad style, since AES expects a uniformly random key. It also means that the password needs to be much stronger than what you'd need if you used a proper password based KDF.
Jan
30
comment Merkle hash tree updates
The basic variant of merkle trees is only efficient for leaf replacements and appending to the end of the dat, but not efficient insertions/deletions in the middle. But there are other hash tree constructions that allow efficient insertions.
Jan
28
comment How do I communicate the value of the initialization vector to the end user? Should it be part of the encrypted message?
Standard practice is using a random per message IV and sending it alongside the message, typically as a prefix. So in principle you got the IV handling right.
Jan
28
comment Why isn't CTR mode (counter mode) used more often?
@MaartenBodewes In that case I couldn't use what Microsoft built into .NET either. In fact whenever I needed raw CTR (not authenticated encryption like GCM), I needed random read access, which the .NET API doesn't provide.
Jan
28
comment Why isn't CTR mode (counter mode) used more often?
@Anthony Luckily implementing CTR on top of ECB is pretty easy. Perhaps 10 lines of code.
Jan
28
comment Why isn't CTR mode (counter mode) used more often?
One problem with CTR mode is that there isn't just a single way of turning counter and nonce into input for the block cipher core.
Jan
27
comment Is there a strong cryptographic reason for GCM's 2^39 - 256 bit limit?
I'm talking about using a message counter as nonce. That way you can have a collision between (k, n_1, c_1) and (k, n_2, c_2).
Jan
27
comment Is there a strong cryptographic reason for GCM's 2^39 - 256 bit limit?
For GCM to be secure the inputs to AES must be unique. With concatenation having a unique nonce (responsibility of the caller) and a unique block counter (part of GCM itself) is enough to guarantee unique inputs to AES. With XOR the caller must make sure that the 128 bit nonces are spaced far enough from each other so that xor-ing the counter doesn't cause a collision. That's annoying.
Jan
27
answered Is there a strong cryptographic reason for GCM's 2^39 - 256 bit limit?
Jan
27
comment Is there a strong cryptographic reason for GCM's 2^39 - 256 bit limit?
With concatenation the caller only has to ensure the nonce is unique. For example they can use a counter. If you use xor or add nonce and counter you get overlaps, so a counter as nonce would be fatally broken.
Jan
26
answered How does BLAKE2 ensure that hash(A) != hash(B) when B = A||0 and both A & B have the same number of blocks?
Jan
26
comment How does BLAKE2 ensure that hash(A) != hash(B) when B = A||0 and both A & B have the same number of blocks?
My blog entry Alternative Blake Padding might be relevant, where I propose a simplified padding, which with some minor tweaks turned into the Blake2 padding.
Jan
26
comment How does BLAKE2 ensure that hash(A) != hash(B) when B = A||0 and both A & B have the same number of blocks?
@Nova The specification document is the first link in the Downloads section.
Jan
23
comment Finding strong primes
How big it has to be depends on what you want to use it for. For Diffie-Hellman I'd consider 1024 bits the minimum with 2048 bits recommended. Choosing p=2*q+1 is standard practice when generating Diffie-Hellman groups.
Jan
23
comment Number of keys when using symmetric and asymmetric encryption?
I wouldn't count an asymmetric keypair as two keys.
Jan
22
comment How does RSA padding work exactly?
PKCS#1 describes two paddings, v1.5 padding (which is weak) and OAEP padding (which is recommended). Don't try to invent your own padding.
Jan
22
awarded  Announcer
Jan
20
comment Practical Attack on RSA
Key size is of little relevance when considering side channel attacks. Some kinds of side channel attacks can be prevented by constant time implementations, for some you need to shield the hardware.