The techniques for authenticating executable code employs keys (609) to
modify the code (611). In static watermarking, the code is watermarked by
using the key to determine positions in the executable code that will
specify digits of a watermark value (607). Instructions are inserted at
those positions as required to express the value. The inserted
instructions do not affect the outputs from the code when the code is
executed. The watermarked code is authenticated by using the key (609) to
read the value and determining whether it is the proper value for that
code. In dynamic watermarking, the code is watermarked using the key
(607) to modify the program to produce execution state for an execution
of the code that has properties that are determined by the key.
Authentication is done by executing the code and comparing (621) the
execution state that would have been produced if the program had been
watermarked with the key.