From: Mok-Kong Shen on

Let C = E(K,P) denote a block encryption processing. I intend to apply
authentication as follows (n=number of blocks):

S[0] = IV;

for (i=0; i<n; i++)
{ C[i] = E(K,S[i]^P[i]);
S[i] = E(K,S[i]^P[i]^C[i]);
}

S[n-1] = authentication.

Are there any security problems in this? Has this been done anywhere?
It is clear that, unlike CBC, if any C[i] has transmission error, then
all following blocks would be garbled. However, firstly, modern
transmssion protocols have sufficiently good error correction at lower
layers and secondly, such garbling could even be considered as an
advantage, since any modification of C by a third person would have
a higher chance of being detected.

Thanks in advance.

M. K. Shen
--------------------------------------------------------------------

[OT] In an attempt to reduce annoyance to the general readers, I am
unfortunately forced to forgo any opportunities of discussion with
those, who have the unnice impulse (urge, "Drang" in German) to
overload their posts with bandwidth-wasting personal stuffs and/or
bad words, by placing them into my kill-file. Those who dislike my
posts for whatever reasons are requested to kindly put me into their
kill-files as well.


From: Scott Contini on
On Aug 9, 3:54 pm, Mok-Kong Shen <mok-kong.s...(a)t-online.de> wrote:
> Let C = E(K,P) denote a block encryption processing. I intend to apply
> authentication as follows (n=number of blocks):
>
>    S[0] = IV;
>
>    for (i=0; i<n; i++)
>    { C[i] = E(K,S[i]^P[i]);
>      S[i] = E(K,S[i]^P[i]^C[i]);
>    }
>
>    S[n-1] = authentication.
>
> Are there any security problems in this? Has this been done anywhere?

I'm pretty sure you haven't written this correctly:
Each iteration is independent from the previous.

I'm pretty sure that once you fix it up, it is still
vulnerable to existential forgeries.

Scott
From: Mok-Kong Shen on
Scott Contini wrote:
> Mok-Kong Shen wrote:
>> Let C = E(K,P) denote a block encryption processing. I intend to apply
>> authentication as follows (n=number of blocks):
>>
>> S[0] = IV;
>>
>> for (i=0; i<n; i++)
>> { C[i] = E(K,S[i]^P[i]);
>> S[i] = E(K,S[i]^P[i]^C[i]);
>> }
>>
>> S[n-1] = authentication.
>>
>> Are there any security problems in this? Has this been done anywhere?
>
> I'm pretty sure you haven't written this correctly:
> Each iteration is independent from the previous.

Thank you very much for pointing out the blunder. It should be

S[0] = IV;

for (i=0; i<n; i++)
{ C[i] = E(K,S[i]^P[i]);
S[i+1] = E(K,S[i]^P[i]^C[i]);
}

S[n] = authentication.

> I'm pretty sure that once you fix it up, it is still
> vulnerable to existential forgeries.

My knowledge is very poor. Could you kindly help and tell
a bit more about the possible vulnerabilities.

Thanks in advance.

M. K. Shen

From: Scott Contini on
On Aug 10, 2:15 am, Mok-Kong Shen <mok-kong.s...(a)t-online.de> wrote:
> Scott Contini wrote:
> > Mok-Kong Shen wrote:
> >> Let C = E(K,P) denote a block encryption processing. I intend to apply
> >> authentication as follows (n=number of blocks):
>
> >>     S[0] = IV;
>
> >>     for (i=0; i<n; i++)
> >>     { C[i] = E(K,S[i]^P[i]);
> >>       S[i] = E(K,S[i]^P[i]^C[i]);
> >>     }
>
> >>     S[n-1] = authentication.
>
> >> Are there any security problems in this? Has this been done anywhere?
>
> > I'm pretty sure you haven't written this correctly:
> > Each iteration is independent from the previous.
>
> Thank you very much for pointing out the blunder. It should be
>
>     S[0] = IV;
>
>     for (i=0; i<n; i++)
>     { C[i] = E(K,S[i]^P[i]);
>       S[i+1] = E(K,S[i]^P[i]^C[i]);
>     }
>
>     S[n] = authentication.
>
> > I'm pretty sure that once you fix it up, it is still
> > vulnerable to existential forgeries.
>
> My knowledge is very poor. Could you kindly help and tell
> a bit more about the possible vulnerabilities.
>
> Thanks in advance.
>
> M. K. Shen

It is trivially breakable. Two attacks: (i) the first
block, and (ii) extension attacks. You should be able
to figure out the rest. I hope. This is very basic stuff.

Scott
From: Mok-Kong Shen on
Scott Contini wrote:

> It is trivially breakable. Two attacks: (i) the first
> block, and (ii) extension attacks. You should be able
> to figure out the rest. I hope. This is very basic stuff.

I have in the meantime also thought about a little bit myself.
Would the following slight modification tighten up the matter?

S[0] = E(K,IV);

for (i=0; i<n; i++)
{ C[i] = E(K,S[i]^P[i]);
S[i+1] = E(K,S[i]^P[i]^C[i]);
}

E(K,S[n]) = authentication.

Thanks.

M. K. Shen