Adam Back wrote:
Ian Brown and I proposed a simpler, non-interactive, approach for use in
openPGP we called "non-transferable signatures"

    http://www.cs.ucl.ac.uk/staff/i.brown/nts.htm

The basic idea is you use an integrity protected (non-malleable) symmetric
encryption option in PGP, and then change the signature packet to be a
public key signature of the hash of the symmetric key and the recipients
public key.

    RSA_Enc( B_pub, sk ) +
    RSA_Sig( A_pri, H( sk, B_pub ) ) +
    c = Sym_Enc( sk, M ) +
    Mac( sk, c )

it proves A sent B a message, but only proves the content of the message to
B, if B attempts to transfer the signature to C, C cant distinguish whether
B forged the message vs A signed the message.

Adam

What about
     c'=RSA_Enc( B_pub, sk ) +
     RSA_Sig( A_pri, H( sk, c' ) ) +

This achieves at least the same security level. It *might* achieve more.

Also, H( sk, B_Pub ) must have context data (time window, reference to transport mechanism, ...) so that replay attacks are detected.

Finally, you may have an optional proof of freshness (to the benefit of B) with a preliminary step:

     A gets sk' from B, else uses sk'=0

     c'=RSA_Enc( B_Pub, sk" ) +
     RSA_Sig( A_pri, sk' || H( sk", sk', c' ) ) +
     sk=H(sk",sk')

B maintains a database of outstanding values for sk' if it wishes to validate the freshness.

Regards,


--
- Thierry Moreau

CONNOTECH Experts-conseils inc.
9130 Place de Montgolfier
Montreal, QC, Canada H2M 2A1

Tel. +1-514-385-5691
_______________________________________________
cryptography mailing list
[email protected]
http://lists.randombit.net/mailman/listinfo/cryptography

Reply via email to