Code signing system and method
View Patent ↗A code signing system and method is provided. The code signing system operates in conjunction with a signed software application having a digital signature and includes an application platform, an application programming interface (API), and a virtual machine. The API is configured to link the software application with the application platform. The virtual machine verifies the authenticity of the digital signature in order to control access to the API by the software application.
1. A method of controlling access to a plurality of sensitive application programming interfaces (APIs) and at least one non-sensitive API on a device by an application signed with a private key of a private key-public key pair, the method comprising:
verifying, by a processor of the device, a digital signature of the application using a public key, the application including the digital signature generated using the private key and the private key not being accessible to the device;
after successfully verifying the digital signature of the application using the public key, allowing the application to access a first sensitive API, the first sensitive API being associated with the public key, and the allowing the application to access the first sensitive API being further based on receiving user input regarding whether to grant the application access to the first sensitive API;
restricting the application from accessing a second sensitive API, the second sensitive API not being associated with the public key; and
allowing the application to access the at least one non-sensitive API.
2. The method of claim 1 , wherein the second sensitive API is associated with a second public key different from the public key associated with the first sensitive API.
3. The method of claim 1 wherein the device comprises a mobile device.
4. The method of claim 1 wherein the public key is associated with an entity that classified the first sensitive API as sensitive.
5. The method of claim 1 wherein the public key is associated with an author of the first sensitive API.
6. The method of claim 1 wherein the public key is associated with a manufacturer of the device.
7. The method of claim 1 wherein the first sensitive API is classified as sensitive by a manufacturer of the device.
8. The method of claim 1 wherein the first sensitive API is classified as sensitive by an author of the first sensitive API.
9. The method of claim 1 wherein the first sensitive API includes a user interface API.
10. The method of claim 1 wherein the first sensitive API interfaces with an input/output (I/O) controller.
11. The method of claim 1 wherein the first sensitive API includes a radio API.
12. The method of claim 1 wherein the first sensitive API interfaces with one or more wireless communication functions.
13. The method of claim 1 wherein the first sensitive API interfaces with address book data.
14. The method of claim 1 wherein the first sensitive API interfaces with calendar data.
15. The method of claim 1 wherein the public key is stored on the device.
16. The method of claim 1 wherein the public key is obtained from a public key repository.
17. The method of claim 1 wherein the first sensitive API is included in an API library.
18. The method of claim 1 wherein the verifying includes:
generating a hash of the application;
applying the public key to the digital signature to obtain an output; and
determining that the hash and the output are equivalent.
19. The method of claim 1 wherein the verifying includes:
generating an abridged version of the application;
applying the public key to the digital signature to obtain an output; and
determining that the abridged version and the output are equivalent.
20. The method of claim 1 wherein the verifying includes:
generating a transformed version of the application;
applying the public key to the digital signature to obtain an output; and
determining that the transformed version and the output are equivalent.
21. The method of claim 1 further comprising:
verifying a second digital signature of a second application using a second public key; and
after successfully verifying the second digital signature of the second application using the second public key, allowing the second application to access the second sensitive API, the second sensitive API being associated with the second public key.
22. The method of claim 1 further comprising:
failing to verify a second digital signature of a second application using the public key; and
purging the second application.
23. The method of claim 1 further comprising:
allowing an unsigned application to access the non-sensitive API.
24. The method of claim 1 further comprising:
restricting an unsigned application from accessing the first sensitive API and the second sensitive API.
25. The method of claim 24 further comprising:
executing the unsigned application on the device.
26. The method of claim 1 further comprising:
determining that a second application is unsigned; and
purging the second application from the device.
27. The method of claim 1 further comprising:
on a second device, after successfully verifying a second digital signature of a duplicate of the application using a duplicate of the public key; and
allowing the duplicate application to access a duplicate of the first sensitive API on the second device, the duplicate of the first sensitive API being associated with the duplicate of the public key.
28. The method of claim 17 wherein the API library includes the public key for verifying the digital signature.
29. The method of claim 1 wherein the application is associated with a plurality of digital signatures.
30. The method of claim 29 wherein the plurality of digital signatures includes a global signature.
31. The method of claim 1 wherein the application is associated with a plurality of digital signatures, the method comprising:
verifying a second digital signature of the application using a second public key different from the public key associated with the first sensitive API; and
after successful verifying the second digital signature of the application using the second public key, allowing the application to access a third sensitive API, the third sensitive API being associated with the second public key.
32. A device capable of controlling access to a plurality of sensitive application programming interfaces (APIs) and at least one non-sensitive API on the device by an application signed with a private key of a private key-public key pair, the device comprising:
a processor capable of executing machine readable instructions for:
verifying a digital signature of the application using a public key, the application includes the digital signature generated using the private key and the private key is not accessible to the device;
after successfully verifying the digital signature of the application using the public key, allowing the application to access a first sensitive API, the first sensitive API being associated with the public key, and the allowing the application to access the first sensitive API being further based on receiving user input regarding whether to grant the application access to the first sensitive API;
restricting the application from accessing a second sensitive API, the second sensitive API not being associated with the public key; and
allowing the application to access the at least one non-sensitive API.
33. A method of controlling access to a plurality of sensitive application programming interfaces (APIs) and at least one non-sensitive API on a device by an application signed with a private key of a private key-public key pair, the method comprising:
verifying, by a processor of the device, a digital signature of the application using a public key the application being associated with the digital signature generated using the private key and the private key not being accessible to the device;
after successfully verifying the digital signature of the application using the public key, allowing the application to access a first sensitive API, the first sensitive API being associated with the public key, the allowing the application to access the first sensitive API being further based on receiving user input regarding whether to grant the application access to the first sensitive API;
restricting the application from accessing a second sensitive API, the second sensitive API not being associated with the public key; and
allowing the application to access the at least one non-sensitive API.
34. One or more non-transitory computer readable memories comprising instructions that when executed by one or more processors of a computing device cause the one or more processors to control access to a plurality of sensitive application programming interfaces (APIs) and at least one non-sensitive API on the computing device by an application signed with a private key of a private key-public key pair, the one or more processors performing instructions comprising:
verifying, by a processor of the device, a digital signature of the application using a public key the application being associated with the digital signature generated using the private key and the private key not being accessible to the device;
after successfully verifying the digital signature of the application using the public key, allowing the application to access a first sensitive API, the first sensitive API being associated with the public key, the allowing the application to access the first sensitive API being further based on receiving user input regarding whether to grant the application access to the first sensitive API;
restricting the application from accessing a second sensitive API, the second sensitive API not being associated with the public key; and
allowing the application to access the at least one non-sensitive API.