A computer system includes a program executer that executes verifiable
architecture neutral programs and a class loader that prohibits the
loading and execution of non-verifiable programs unless (A) the
non-verifiable program resides in a trusted repository of such programs,
or (B) the non-verifiable program is indirectly verifiable by way of a
digital signature on the non-verifiable program that proves the program
was produced by a trusted source. In the preferred embodiment, verifiable
architecture neutral programs are Java bytecode programs whose integrity
is verified using a Java bytecode program verifier. The non-verifiable
programs are generally architecture specific compiled programs generated
with the assistance of a compiler. Each architecture specific program
typically includes two signatures, including one by the compiling party
and one by the compiler. Each digital signature includes a signing party
identifier and an encrypted message. The encrypted message includes a
message generated by a predefined procedure, and is encrypted using a
private encryption key associated with the signing party. A digital
signature verifier used by the class loader includes logic for processing
each digital signature by obtaining a public key associated with the
signing party, decrypting the encrypted message of the digital signature
with that public key so as generate a decrypted message, generating a test
message by executing the predefined procedure on the architecture specific
program associated with the digital signature, comparing the test message
with the decrypted message, and issuing a failure signal if the decrypted
message digest and test message digest do not match.
Un sistema di elaborazione include un executer di programma che esegue i programmi neutri di architettura verificabile e un caricatore del codice categoria che proibisce il caricamento e l'esecuzione dei programmi non-verificabili a meno che (A) il programma non-verificabile risieda in un deposito di fiducia di tali programmi, o (B) il programma non-verificabile è indirettamente verificabile via una firma digitale sul programma non-verificabile che risulta che il programma è stato prodotto da una fonte di fiducia. Nel metodo di realizzazione preferito, i programmi neutri di architettura verificabile sono programmi del bytecode del Java di cui l'integrità è verificata per mezzo di una macchina verificatrice di programma del bytecode del Java. I programmi non-verificabili sono generalmente programmi compilati specifici di architettura generati con l'assistenza di un compilatore. Ogni programma specifico di architettura include tipicamente due firme, compreso una dal partito di compilazione ed una dal compilatore. Ogni firma digitale include un contrassegno di sign del partito e un messaggio cifrato. Il messaggio cifrato include un messaggio generato da una procedura predefinita ed è cifrato usando una chiave riservata di crittografia connessa con il partito di sign. Una macchina verificatrice digitale della firma usata dal caricatore del codice categoria include la logica per l'elaborazione dell'ogni firma digitale ottenendo una chiave pubblica connessa con il partito di sign, decrypting il messaggio cifrato della firma digitale con quella chiave pubblica per genera un messaggio decrypted, generante un messaggio della prova eseguendo la procedura predefinita sul programma specifico di architettura connesso con la firma digitale, paragonante il messaggio della prova al messaggio decrypted e pubblicante un segnale di guasto se la raccolta decrypted del messaggio della raccolta e della prova del messaggio non abbina.