Jacob WIlder created PIRK-23:
--------------------------------

             Summary: Provide integrity and verification of serialized objects 
                 Key: PIRK-23
                 URL: https://issues.apache.org/jira/browse/PIRK-23
             Project: PIRK
          Issue Type: New Feature
          Components: Querier, Responder
            Reporter: Jacob WIlder
            Assignee: Jacob WIlder


Provide a way to sign and verify serialized output using OpenPGP through 
BouncyCastle's OpenPGP API. BouncyCastle is licensed under the MIT license. 

Mailing list message:
Given that [deserialization attacks are a ripe attack 
surface|https://www.owasp.org/index.php/Deserialization_of_untrusted_data] it's 
a good idea to make it possible to authenticate serialized objects whenever 
possible. In the case of Pirk—where systems which hold sensitive data will be 
deserializing objects received from other entities—offering users the option to 
sign/verify objects before loading them is valuable. If our users were not 
dealing with sensitive information of some sort, they wouldn't be using Pirk. 

I have written some code that uses BouncyCastle to OpenPGP clearsign base64 
encoded Java objects. I'm going to see how cleanly I can integrate it with 
Tim's new Serialization code so that it's automatically available to anything 
that uses the serialization tools. 

Where things get complicated is in how to expose it to users. Below is my 
current thinking. I'd appreciate any feedback. 

By default, all InputStreams used to read data will be checked to see if they 
start with the line "-----BEGIN PGP SIGNED MESSAGE-----". If it does, we'll 
pull the PGP public keyring from a path specified by property 
serialization.openPGPPublicKeyRing and verify the signature. Failed signature 
verifications result in an exit. 

Property serialization.requireSignedInput will reject any input that is not 
signed with a valid signature. 
Property serialization.signOutgoingObjects will sign all outgoing Serialized 
Java objects. 
Properties serialization.openPGPPrivateKey, 
serialization.openPGPPrivateKeyPassword, and serialization.openPGPPublicKeyRing 
will indicate the location of the private key, the password used to decrypt it, 
and the location of the public key ring respectively. 


I had considered using SignedObjects but decided to give OpenPGP a shot because 
it's easier to hand-verify signatures or integrate verification of signed data 
into automated data flow (say, between two distinct entities sharing data using 
Pirk). 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to