Hi, everyone.
We want to add new hash algorithm-cSHAKE256/ParallelHash256 defined by NIST SP 
800-185-into BaseCryptLib of CryptoPkg. This feature can be applied for digital 
authentication functions like Capsule Update. It utilizes multi-processor to 
calculate the image digest in parallel for update capsule authentication so 
that lessen the time of capsule authentication.

Bugzilla: https://bugzilla.tianocore.org/show_bug.cgi?id=3596

[Background]
The intention of this change is to improve the capsule authentication 
performance.
Currently, the image is calculated to a hash value (usually by SHA-256), then 
the hash value be signed by a certificate. The header, certificate, and image 
binary be sealed to the capsule. In authentication phase, the program should 
calculate the hash using image binary in capsule and then perform 
authentication procedures.

[Proposal]
Now, we propose a new authentication flow, which firstly pre-calculates the 
ParallelHash256 digest of the image binary in parallel with multi-processors, 
then use the ParallelHash256 digest (instead of original image binary) in 
subsequent SHA-256 hash for sign/authentication.
Since the big size image be compressed to the ParallelHash256 digest that only 
have 256 bytes, the time of SHA-256 running would be less.

[Required Changes]
Mainly in CryptoPkg, MdeModulePkg, SecurityPkg:
1. CryptoPkg: need to add the new hash algorithm named 
cSHAKE256/ParallelHash256 in BaseCrypLib. The ParallelHash function will 
consume CPU MP Service Protocol, not sure if this is allowed in BaseCryptLib?
2. MdeMoudulePkg: Add new authenticate function 
AuthenticateFmpImageWithParallelhash() to FmpAuthenticationLib. This is because 
original AuthenticateFmpImage() interface only have 4 parameters  while the new 
have 5 parameters. The 5th parameter is ParallelHash256 digest raised above. We 
try to do the parallel hash before authentication and transfer the result to 
AuthenticateFmpImage function as parameter. So that we can do only once 
parallel hash externally in the case of multiple authentication which saves 
more time.
3. SecurityPkg: Add new function named 
FmpAuthenticatedHandlerPkcs7WithParallelhash() and 
AuthenticateFmpImageWithParallelhash() to FmpAuthenticationLibPkcs7. This is 
because original interfaces not have the formal parameter (ParallelHash256 
digest) we need. We try to do the parallel hash before authentication and 
transfer the result to AuthenticateFmpImage and FmpAuthenticatedHandlerPkcs7 
function as parameter. So that we can do only once parallel hash externally in 
the case of multiple authentication which saves more time.

Please let me know if you have any comment or concern on this proposed change.

Thanks for your time and feedback!

Best regards,
Zhihao



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#80162): https://edk2.groups.io/g/devel/message/80162
Mute This Topic: https://groups.io/mt/85329270/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to