SavaPage generates a digital signature for every document printed-out or downloaded. Digital signatures are generated using a cryptographic technique called Hash-based Message Authentication Code (HMAC)[35]. The algorithm takes various output job attributes such as job time, user name, document name and UUID, and combines them with a secret key. The result is then passed through the MD5 digest algorithm. The resulting signature is unique to the document instance [36]. The applied secret key ensures the authenticity of the signature.
The algorithm used is:
                            Digest = Hash(date time || user name || document name || document
                                UUID)
                        
                            Signature = Hash(Digest || Key)
                        
where
                            Key is a random string generated by SavaPage at
                            initial installation. It is stored as hmac.key property in
                            the
                                /opt/savapage/server/data/encryption.properties
                            file, which is also used for Encrypted
                            Secrets.
Hash is the MD5 function. 
                            date time is formatted in ISO 8601 basic
                            format from year to second (yyyyMMddTHHmmss). The time is
                            local time (not UTC). E.g. 20120906T151231. 
The signature is stored in the database for future use.
[36] The SHA1 digest algorithm is a stronger alternative, but MD5 is secure enough for our application and generates shorter signatures, which are easier to enter as argument to find the matching document.