Due date: Friday, February 26, 1pm
As in assignment 2, you should work on this assignment by yourself. Please cite your sources.
What different classes of applications will still benefit from mobile code?
As usual, the Internet, the MP3 compression standard, and computer CD-ROM writers have changed all the rules. The RIAA wants a strong solution to their problems. Consumers want to have their music. Discuss how their problems could be addressed. Do they need trusted hardware? Can mobile code help?
For lots of discussion and pointers to resources, a good place to start is MP3.com.
The other rule is that in order to access a member of a class instance (i.e., something allocated by using the new operation), you must already have a reference to the instance. In this respect, a class instance reference act as capability to access the class.
As we've seen, a sufficiently crafty adversary might be able to find a bug in the type checker and use this to override the above rules. One proposed solution is to use the hardware page tables instead of a type checker to enforce program safety. Describe exactly how you might safely support the following Java primitive operations:
You may assume your kernel supports an operation like Solaris mprotect(2) and kernel trap handlers can emulate the behavior the trapped instruction should have caused and then resume execution in the user code.
There are a number of different data structures that can act as efficient dictionaries, allowing storage and lookup of key/value pairs. These data structures also allow you to iterate over all their key-value pairs but make no guarantees about what order they will arrive.
If this were a real system, your data structure would be linked with an interpreter allowing the dictionary to be loaded with new words, queried, and listed out (in no particular order, for this exercise...). When the system vendor wants to check a watermark, they will start with an empty dictionary, load a sample set of words, and list it back out again. Depending on your software watermark, the order of the list should be different, but all other queries should continue to function normally.
Please choose any appropriate data structure (perhaps one you learned in a CS theory class) and modify it to support some kind of software watermark. Present pseudocode for the algorithm and highlight watermark-relevant portions. Say which techniques from Collberg / Thomborson you plan to use and which techniques you don't feel are applicable.
Your new data structure should be queryable in O(log N) expected time (or better) if it has N nodes in it. You may use randomized data structures (although this will be tricky). Generic unbalanced trees are not acceptable.
How many bits of watermarking can you hide in your algorithm? What would an adversary need to do to remove your watermark bits? If an adversary manages to corrupt some of your bits, will the rest still be detectable?