Hi,

I'm investigating upgrading the applications I'm responsible for from
SHA1 as the default PKCS#7 SignedData digest algorithm to stronger
digests such as SHA256, in ways that preserve backwards compatibility
for signature verifiers which do not support digest algorithms other
than SHA1. I want to check my understanding of the PKCS#7 format and
available options.

What think I want to do is digest message content with both SHA1 and
SHA256 (or more generally, a set of digest algorithms) such that older
applications can continue to verify via the SHA1, and upgraded
applications can begin verifying via the SHA256 (more generally, the
strongest digest provided), ignoring the weaker algorithm(s). [If there
is a better approach, please let me know.]

It appears that within the PKCS#7 standard, the only way to provide
multiple digests is to provide multiple SignerInfos, one for each digest
algorithm. Unfortunately, this would seem to lead to a net *decrease* in
security, as an attacker is able to strip all but the the SignerInfo
with the weakest digest algorithm, which alone will still form a valid
signature. Is this understanding correct?

If so, my idea was to use custom attributes within the
authenticatedAttributes field of SignerInfo to provide additional
message-digests for the additional digest algorithms (leaving SHA1 as
the "default" algorithm for backwards compatibility). Since this field
is authenticated as a single block, this would prevent the above attack.
Does this seem like a viable approach? Is there a way to accomplish this
or something similar without going outside of the PKCS standard?

Thanks,
John
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to