Re: Signatures and encryption headers
- From: Fabrice <fabrice.gautier@xxxxxxxxx>
- Date: Mon, 10 Nov 2008 14:25:27 -0800 (PST)
On Nov 7, 11:22 pm, d...@xxxxxxxxxxxxxxxxxxxxxxxx (David Wagner)
wrote:
Fabrice wrote:
But in any case, assuming that session key and IVs are
indistinguishable from random data, that any value is a plausible one,
I still dont see how not authenticating those values could breach the
confidentiality....
I've seen all sorts of crazy and surprising chosen-ciphertext attacks.
I wouldn't count on inability to imagine such an attack to imply that
leaving IVs unauthenticated is safe. I suspect there are scenarios
where it is demonstrably unsafe: where an attacker can modify an IV in
transit, thereby causing controlled modifications to the decrypted
message received by the receiver, thereby breaching confidentiality.
I'm not sure I follow this statement. Do you consider confidentiality
breached when an attacker can modify the message received ? I would
only consider confidentiality breached when the attacker can gain
knowledge of what the sender actually sent.
But I see how the lack of authentication can cause the receiver to act
improperly and "forward" confidential content to unauthorized party.
But I would still think that authenticating the IV is not the real
issue (although it might make injection attacks impossible) but rather
the fact that there is no authentication of the messages.
In the WEP attack described in the paper, it seems to me that the real
issue is that the checksum is not keyed and as such does not provide
authentication.
Now, to come back to my scenario, I would have authentication, but
only for the message itself, not for the iv or other encryption
parameters.
It would look something like that:
A--->S--->D--->R
A is the Author
S is the Signer
D the Distributor (there can be more than 1)
R the Recipient (there willl be more than 1)
First, let see a scenario without encryption, ie there is no secret in
the payload:
A create a payload, S signs it with public key crypto (most likely
RSA).
S private key is probably the most important piece of key material and
is protected accordingly (Think armed guard, retina scans and things
like that). So Signing is here a very expensive and slow operation.
D get the signature and the payload create a file with them and
(somehow) send it to R.
R will only accept and trust payloads signed by S.
R got S Public Key in a physically secure way.
S is also supposed to verify that what it got from A is legit: ie S
will audit the payload or will have setup a secure communication
channel with A in advance.
D just store the outputs of S and when new Recipient come into
existence, it can send them the signed payloads without A or S having
to do anything.
Now, on top of that, sometimes A might include a secret in the
payload, so we want to have it encrypted as well. For that purpose R
and D share a symmetric key. This symmetric key has been shared in a
secure way once. For various reasons (performance, licensing...) the
recipient cannot use public key cryptography for decryption.
So now D does the following:
1- D choose a cipher (supported by R), generate a random session key
and IV, and encrypt the payload using that session key and that
cipher
2- D choose a key derivation method (supported by R) and uses it to
derive a key encryption key.
3- D encrypt the session key using the derived key encryption key.
4- D send the encryption header (cipher, derivation method, IV and
encrypted session key) to R along with encrypted payload and signature
On the R side:
1. R receive the header and check that the parameters are valid (ie
that it supports the chosen cipher and key derivation)
2. Derive the key, decrypt the payload
3. Check the RSA signature on the payload.
Note that R never authenticates D. That is convenient because we dont
want R to have knowledge of D, only S.
Plausible entry points for attacker would be:
- Know Plaintext: It is plausible than an attacker could compromise A
and get the secret directly from him (then we have failed before we
started). It is also very much more so plausible than an attacker
would have access to many plaintexts that do not contain the real
secret.
- Chosen Plaintext: It is somewhat plausible that an attacker could
get S to sign any plaintext it wishes.
- Any attacker could impersonate D, send any encryption header and any
encrypted payload. But, the recipient will not act like a full
decryption oracle. It is possible that the Recipient leaks information
about the plaintext, but only if it is a plaintext signed by S. So for
this reason, I dont think Chosen Ciphertext Attacks are really
possible in this context.
- IV and session key re-use should be avoided by D by selecting them
randomly.
So in that scenario, I dont see how having the encryption header not
authenticated would cause any serious issue.
I note that there is a possibility that A would want to send something
encrypted to R without having it signed by S. In that case I
understand that CCA are probably more plausible, and that would be an
accepted risk.
I also note that if S private key were compromised, then CCA are also
more likely.
-- Fabrice
.
- Follow-Ups:
- Re: Signatures and encryption headers
- From: David Wagner
- Re: Signatures and encryption headers
- References:
- Signatures and encryption headers
- From: Fabrice
- Re: Signatures and encryption headers
- From: Fabrice
- Re: Signatures and encryption headers
- From: Joseph Ashwood
- Re: Signatures and encryption headers
- From: Fabrice
- Re: Signatures and encryption headers
- From: David Wagner
- Signatures and encryption headers
- Prev by Date: Question on Public-private cryptography
- Next by Date: Re: Question on Public-private cryptography
- Previous by thread: Re: Signatures and encryption headers
- Next by thread: Re: Signatures and encryption headers
- Index(es):
Relevant Pages
|