|
About Andrew Choi
MIDI Programs
MIDI File Player (External Device)
MIDI Destination Pop-Up Button
Other Programs Cocoa Sample Programs Syntax Coloring Using Flex Algorithms Jazz Chord Analysis as Optimization
|
A blog where I will write mostly about programming in Cocoa and CoreMIDI, and experiences from my ports of Emacs and XEmacs to the Mac OS.
Elliptice Curve Cryptography (ECC) is believed to achieve the same level of security as public-key encryption methods such as RSA and DSA using a much smaller modulus. So I looked into ECC libraries today for use in my license code scheme. There seems to be only one in the public domain called Crypto++. Like openssl, using it requires a bit of searching through the web for examples and documentation. Ive written some sample code to sign and verify a message using ECDSA. Using the shortest recommended key size, the signatures are 30 bytes long. Quite a nice size to be sent as license codes to registered users.
Suppose were implementing an application whose Save Document function is disabled unless the application is registered. For simplicity lets assume that the license code is simply the signature of the name of the registered user, signed using the private key of a key pair. The Save Document function is enabled if we can verify that the signature corresponds to the user name, using the public key. Assuming that the key pair is secure, it will be impossible for attackers to produce a key generator for the application. The question that remains is whether they can patch the application to bypass the statements that verify the license code. Statements such as if (isRegistered) ... or if (VerifySignature()) ... or obfuscated versions of such statements can be bypassed by patching the machine code to always return a true value. Can such if statements be eliminate? Yes, and I believe the following is an original proposal.
Heres a brief report on the paper Manufacturing Cheap, Resilient, and Stealthy Opaque Constructs by Collberg, Thomborson, and Low.
The paper Oblivious Hashing: A Stealthy Software Integrity Verification Primitive by Chen, Venkatesan, Cary, Pang, Sinha, and Jakubowski claims that it is straightforward to identify code verification routines in an attack because such routines read the applications code segments. Horne et al. addressed this problem in their implementation of testers by obfuscating the instructions for such reads. In any case oblivious hashing is an interesting idea of interspersing hashing code in application code that needs to be protected. The hash results depend on data used exclusively by the hashing code as well as application data. Therefore the dynamic behavior of the application is checked. The biggest problem with the paper is that it hasnt worked out a scheme to check the hash results! One would think a paper written by six authors would do much better than that. Oh well!
|
Lists
Less-Known Facts About Emacs
Chinese Restaurants in Calgary
Calgary/Banff Tourist Attractions
Top-10 Reason I Stopped Working on Emacs
Misc
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Copyright © 2003, 2004, 2005 Andrew Choi (Contact Information). | Created with FCBlog |