This directory contains the interface to the application-bound encryption primitives that are implemented by the elevation service in [src/chrome/elevation_service].
EncryptAppBoundString
and DecryptAppBoundString
act like OSCrypt::EncryptString
and OSCrypt::DecryptString
implemented by [src/components/os_crypt] except that, unlike OSCrypt
, which binds encrypted data to the current user using DPAPI, this API will bind the encrypted data with a ProtectionLevel
specified by the caller.
ProtectionLevels
are defined by chrome/elevation_service and are currently:
ProtectionLevel::PROTECTION_NONE
This acts identically to DPAPI in that the protection level is user-bound. Only a DecryptAppBoundString
call that comes from the same user principle as the original EncryptAppBoundString
call with succeed.
ProtectionLevel::PROTECTION_PATH_VALIDATION
This adds an additional protection that the path of the calling application will be validated. Only a DecryptAppBoundString
call that comes from the same user principle, calling from the same Application (with the same file path) as the original EncryptAppBoundString
call with succeed. It is only safe to call this from an application that is installed into a ‘Trusted Path’ such as C:\Program Files
, otherwise protection can be trivially bypassed by renaming/placing a file into the required location.