-
HINTERGRUND
DER ERFINDUNG
-
Die
vorliegende Erfindung bezieht sich auf eine Technik zum Aktualisieren
eines Programms, während
eine Sicherheit eines mit Schlüssel
installierten Systems oder einer LSI-Vorrichtung, verwendet für ein solches
System, beibehalten wird.
-
Beschreibung
des in Bezug stehenden Stands der Technik
-
Herkömmlich wird,
zum Zweck eines Schutzes eines Programms zum Betreiben einer LSI-Vorrichtung
gegen eine missbräuchliche
Verarbeitung, ein Programm, verschlüsselt mit einem vorbestimmten
Schlüssel
eines Herstellers, in einem Speicher gespeichert und mit dem Schlüssel zur
Ausführung entschlüsselt. Allerdings
wird, mit einem solchen System, ein Programm, verschlüsselt mit
einem gemeinsamen Schlüssel
eines Herstellers, in einer großen
Anzahl von LSI-Vorrichtungen ausgeführt, und demzufolge wird es,
falls Informationen über
den Schlüssel
des Herstellers missbräuchlich
von einem einzelnen Produkt nach außen treten, möglich, einen Missbrauch
von Programmen einer großen
Anzahl von Produkten vorzunehmen. Deshalb kann die Sicherheit nicht
verbessert werden.
-
In
einem Verfahren, das zum Zwecke vorgesehen ist, ein solches Problem
zu beseitigen, wird ein Programm zum Betreiben von LSI-Vorrichtungen
mit einem eigenen Schlüssel,
der für
jede LSI-Vorrichtung einzigartig ist, verschlüsselt, und ein Produkt kann
nur ein Programm, verschlüsselt
mit einem eigenen Schlüssel,
der für
das Produkt einzigartig ist, ausführen (siehe Japanische Patentanmeldungen Nr.'n 2002-215096 und
2002-258481). Ein
solches Verfahren verbessert die Sicherheit, da ein missbräuchliches
nach Außentreten
von Schlüssel-Informationen
von einem einzelnen Produkt keinen Einfluss auf andere Produkte
hat. Als eine Prämisse
für dieses
Verfahren wurde ein Verfahren zum Verschlüsseln eines Schlüssels zweimal
vorgesehen (siehe Japanische, ungeprüfte Patentveröffentlichung
No. 2003-101527).
-
Allgemein
wird ein Aktualisieren eines Programms, installiert in einer Produkt-LSI-Vorrichtung, durch
Sichern eines sicheren Kommunikations-Pfads durch eine SSL- Verbindung und durch
Senden eines Ursprungs-Programms oder eines Programms, verschlüsselt mit
einem Hersteller-Schlüssel,
von einem Server zu der LSI-Vorrichtung erreicht. Allerdings kann
mit diesem Verfahren, wenn auf den Kommunikations-Pfad missbräuchlich
zugegriffen wird, ein Programm, das in einer großen Anzahl von Produkten ausführbar ist,
missbräuchlich
ausgelesen werden, so dass die Sicherheit in einer Programm-Aktualisierung
nicht verbessert wird.
-
In
dem Fall, in dem das vorstehende Verfahren für den Zweck verwendet wird,
ein solches Problem zu beseitigen, können ein Ursprungs-Programm,
oder ein Programm, verschlüsselt
mit einem Hersteller-Schlüssel,
nicht in einer LSI-Vorrichtung ohne irgendeine zusätzliche
Verarbeitung ausgeführt werden,
da die LSI-Vorrichtung nur ein Programm, verschlüsselt mit ihrem eigenen Schlüssel, ausführt.
-
In
einem anderen, möglichen
Verfahren werden Programme, verschlüsselt mit unterschiedlichen Schlüsseln für jeweilige
LSI-Vorrichtungen, in einem Server präpariert, und Schlüssel-Informationen
werden für
jede LSI-Vorrichtung verwaltet. Die Programme, verschlüsselt mit
unterschiedlichen Schlüsseln für jeweilige
LSI-Vorrichtungen, werden von dem Server zu den LSI-Vorrichtungen übertragen.
Allerdings erfordert dieses Verfahren enorme Anstrengungen und Kosten
und ist deshalb nicht praktikabel.
-
Die
Referenz US-A-5,666,411 bezieht sich auf ein System zum Schützen einer
Software gegen eine nicht autorisierte Benutzung durch Begrenzen des
Software-Produkts zur Verwendung mit einem Kauf-Computer. Die geschützten Programme
werden als Dateien, verschlüsselt
unter einem Satz von Schlüsseln,
die in der Programm-Datei gespeichert sind, in einem Feld, bezeichnet
als „Cipher
Key Table" („Chiffrier-Schlüssel-Tabelle") verteilt. Die Chiffrier-Schlüssel-Tabelle
ist selbst unter einem PGMKEY Verteilungsschlüssel verschlüsselt. Jeder
Ziel-Computer ist mit einem Krypto-Mikroprozessor ausgestattet,
der dazu geeignet ist, verschlüsselte
Anweisungen, die einen Vorrichtungs-Chiffrier-Schlüssel (DEVKEY)
einsetzen, der permanent in einem nichtflüchtigen Read-Only-Memory gespeichert
ist, auszuführen.
Zusätzlich
besitzt jedes Computersystem einen System-Schlüssel (SYSKEY). Basierend auf den
jeweiligen IDs greift ein Ziel-Computer auf die Austausch-Datenbank
zu, um den PGMKEY zum Entschlüsseln
des verschlüsselten
Programms (verschlüsselt
mit dem PGMKEY) zu erhalten. Die Austausch-Datenbank sendet den
PGMKEY selbst chiffriert mit dem System-Schlüssel des Computers. Der System-Schlüssel wird
im Voraus in der Austausch-Datenbank in Verbindung mit einer jeweiligen System-ID
gespeichert. Jeder Krypto-Prozessor kann auf den System-Schlüssel SYSKEY
durch Einsetzen seines Vorrichtungs-Chiffrier-Schlüssels DEVKEY
zugreifen. Während
einer Benutzer-Kundenanpassung wird das entschlüsselte, geschützte Programm
zweimal unter Verwendung des DEVKEY, und, in einem zweiten Schritt,
des SYSKEY, entschlüsselt.
-
Es
ist die Aufgabe der vorliegenden Erfindung, ein Verfahren zum Aktualisieren
eines Programms zu schaffen, während
eine hohe Sicherheit in einer LSI-Vorrichtung, geeignet zum Ausführen eines
Programms, verschlüsselt
mit einem eigenen Schlüssel,
einzigartig für
die LSI-Vorrichtung, aufrechterhalten wird.
-
Dies
wird durch die Merkmale des unabhängigen Anspruchs gelöst.
-
Das
Verfahren zum Aktualisieren eines Programms der vorliegenden Erfindung
weist vorzugsweise weiterhin die Schritte auf: Empfangen von gemeinsamen
Schlüssel-Informationen des
Systems, Übertragen
von dem Server, und Erzeugen, durch das System, eines gemeinsamen
Ursprungs-Schlüssels
unter Verwendung der empfangenen Informationen über den gemeinsamen Schlüssel, wobei,
in dem zweiten Schritt, der gemeinsame Ursprungs-Schlüssel dazu
verwendet wird, das gemeinsame, mit Schlüssel verschlüsselte Programm
zu Entschlüsseln.
-
Die
Informationen über
den gemeinsamen Schlüssel
umfassen vorzugsweise einen gemeinsamen, verschlüsselten Schlüssel, erzeugt
durch Verschlüsseln
des gemeinsamen Ursprungs-Schlüssels, mit
einem ersten Ursprungs-Zwischenschlüssel, und einem verschlüsselten,
ersten Zwischenschlüssel, erzeugt
durch Verschlüsseln
des ersten Ursprungs-Zwischenschlüssels mit einem zweiten Ursprungs-Zwischenschlüssel.
-
In
dem Verfahren zum Aktualisieren des Programms der vorliegenden Erfindung
umfasst die LSI-Vorrichtung einen internen Speicher, in dem eigene
Schlüssel-Informationen gespeichert
sind; das System verwendet die Informationen über den eigenen Schlüssel, gespeichert
in dem internen Speicher, um einen eigenen Ursprungs-Schlüssel beim
Hochfahren des Systems zu erzeugen, und an dem dritten Schritt wird
der eigene Ursprungs-Schlüssel
für ein Wiederverschlüsseln des
Ursprungs-Programms verwendet.
-
Die
Informationen über
den eigenen Schlüssel
umfassen vorzugsweise einen verschlüsselten, eigenen Schlüssel, erzeugt
durch Verschlüsseln
des eigenen Ursprungs-Schlüssels mit
einem dritten Ursprungs-Zwischenschlüssel und einem verschlüsselten, zweiten
Zwischenschlüssel,
erzeugt durch Verschlüsseln
des dritten Ursprungs-Zwischenschlüssels mit
einem vierten Ursprungs-Zwischenschlüssel. Alternativ wird der erzeugte,
eigene Ursprungs-Schlüssel
vorzugsweise in einem Register der LSI-Vorrichtung gespeichert und wird zum
Entschlüsseln
des eigenen, mit Schlüssel
verschlüsselten
Programms zu einem Ursprungs-Programm zum Ausführen des eigenen, mit Schlüssel verschlüsselten
Programms verwendet.
-
In
dem Verfahren zum Aktualisieren eines Programms der vorliegenden
Erfindung umfasst die LSI-Vorrichtung vorzugsweise einen Boot-ROM,
in dem ein Boot-Programm gespeichert ist; der externe Speicher umfasst
vorzugsweise ein Akquisitions-Programm zum Einrichten einer Datenübertragung
zwischen der LSI-Vorrichtung und einem Server; und das System führt vorzugsweise
einen Empfang des gemeinsamen, mit Schlüssel verschlüsselten
Programms basierend auf dem Akquisitions-Programm, gespeichert in
dem externen Speicher, aus und steuert eine Aktualisierungs-Verarbeitung,
durchgeführt nach
dem Empfang des gemeinsamen, mit Schlüssel verschlüsselten
Programms basierend auf dem Boot-Programm, gespeichert in dem Boot-ROM.
-
Das
Programm-Aktualisierungs-Verfahren der vorliegenden Erfindung weist
vorzugsweise weiterhin den Schritt eines Empfangens eines Hash-Werts
des Ursprungs-Programms, übertragen von
dem Server aus, auf, wobei, an dem zweiten Schritt, der empfangene
Hash-Wert dazu verwendet wird, eine Hash-Verifizierung in Bezug
auf das entschlüsselte
Ursprungs-Programm durchzuführen.
-
Ein
anderer Aspekt der vorliegenden Erfindung ist ein Server, der in
Bezug auf eine Programm-Aktualisierung in einem System, das eine LSI-Vorrichtung
umfasst, arbeitet, wobei der Server ausführt: einen ersten Schritt eines
Empfangens, von dem System, einer ID der LSI-Vorrichtung und einer Anwendungs-ID,
die Identifikations-Informationen eines Aktualisierungs-Objekt-Programms
sind; einen zweiten Schritt einer Bezugnahme auf eine erste Tabelle,
die Korrespondenzen zwischen Anwendungs-IDs und LSI-IDs anzeigt,
um zu bestimmen, ob das Aktualisierungs-Objekt-Programm zu dem System übertragen
wird oder nicht; und falls an dem zweiten Schritt bestimmt ist,
dass das Aktualisierungs-Objekt-Programm
zu dem System übertragen ist,
einen dritten Schritt eines Übertragens,
zu dem System, eines mit einem gemeinsamen Schlüssel verschlüsselten
Programms, erzeugt durch eine Verschlüsselung des Aktualisierungs-Objekt-Programms,
mit einem gemein samen Schlüssel
und gemeinsamen Schlüssel-Informationen,
von denen der gemeinsame Schlüssel
abgeleitet wird.
-
Der
Server der vorliegenden Erfindung führt vorzugsweise aus: einen
vierten Schritt eines Empfangens, von dem System, eines Signals,
das für eine
Anwendung eigene Informationen anfordert, notwendig zum Ausführen des
Aktualisierungs-Objekt-Programms; und einen fünften Schritt einer Bezugnahme
auf eine zweite Tabelle, die eine Korrespondenz zwischen einer Übertragungs-Historik
der für
die Anwendung eigenen Informationen und den LSI-IDs anzeigt, um
zu bestimmen, ob die für
die Anwendung eigenen Informationen, angefordert an dem vierten
Schritt, übertragen
sind oder nicht.
-
In
dem Server der vorliegenden Erfindung umfassen die Informationen über den
gemeinsamen Schlüssel
vorzugsweise einen verschlüsselten,
gemeinsamen Schlüssel,
erzeugt durch ein Verschlüsseln
eines gemeinsamen Ursprungs-Schlüssels
mit einem ersten Ursprungs-Zwischenschlüssel, und einen verschlüsselten,
ersten Zwischenschlüssel,
erzeugt durch Verschlüsseln
der ersten Ursprungs-Zwischenschlüssel mit einem zweiten Zwischenschlüssel.
-
KURZE BESCHREIBUNG DER
ZEICHNUNGEN
-
1 zeigt
ein Blockdiagramm, das den Aufbau einer sicheren LSI-Vorrichtung
gemäß einer
Ausführungsform
der vorliegenden Erfindung darstellt.
-
2 stellt
den gesamten Ablauf einer Entwicklung und Herstellung, den die sichere
LSI-Vorrichtung der 1 verwendet, dar.
-
3 zeigt
ein Flussdiagramm eines gesamten Verfahrensablaufes eines Boot-Programms.
-
4 zeigt
einen Datenfluss einer Anfangswert-Einstellungsverarbeitung SZ1.
-
5 zeigt
ein Flussdiagramm einer Programm-Installations-Verarbeitung SD1
in dem Produkt-Operations-Modus.
-
6 zeigt
einen Datenfluss 1 einer Programm-Installations-Verarbeitung
SD1.
-
7 zeigt
einen Datenfluss 2 einer Programm-Installations-Verarbeitung
SD1.
-
8 zeigt
ein Flussdiagramm einer normalen Boot-Verarbeitung SD2 in dem Produkt-Operations-Modus.
-
9 zeigt
einen Datenfluss 1 einer normalen Boot-Verarbeitung SD2.
-
10 zeigt
einen Datenfluss 2 einer normalen Boot-Verarbeitung SD2.
-
11 zeigt
ein Flussdiagramm, das die Kommunikation zwischen einer sicheren
LSI-Vorrichtung und einem Server in der Programm-Aktualisierungs-Verarbeitung
darstellt.
-
12 stellt
eine Struktur eines Programms, verwendet in Verbindung mit einer
Programmaktualisierung, das in einem externen Speicher 100 gespeichert
ist, dar.
-
13 zeigt
ein Flussdiagramm, das eine Programm-Aktualisierungs-Verarbeitung
darstellt.
-
BESCHREIBUNG
DER BEVORZUGTEN AUSFÜHRUNGSFORMEN
-
Nachfolgend
wird eine Ausführungsform
der vorliegenden Erfindung unter Bezugnahme auf die Zeichnungen
beschrieben. Es ist anzumerken, dass in der nachfolgenden Beschreibung
ein verschlüsselter
Schlüssel
oder ein Programm, das durch Verschlüsseln eines Schlüssels oder
Programms X unter Verwendung eines Schlüssels Y erhalten ist, als „Enc (X,
Y)" dargestellt
ist.
-
1 zeigt
ein Blockdiagramm, das einen inneren Aufbau einer sicheren LSI-Vorrichtung, die eine
Halbleitervorrichtung der vorliegenden Ausführungsform ist, darstellt.
In 1 kann die sichere LSI-Vorrichtung mit einem externen
Speicher (Flash-Speicher) 100, mit einem externen Tool 110, oder
dergleichen, über
einen externen Bus 120 verbunden sein. Der Betriebs-Modus
der sicheren LSI-Vorrichtung 1 kann durch Zuführen einer
Modus-ID zu der sicheren LSI-Vorrichtung 1 eingestellt werden.
-
Die
Hauptkomponenten der sicheren LSI-Vorrichtung 1, die für die nachfolgende
Beschreibung relevant sind, werden kurz beschrieben.
-
Die
sichere LSI-Vorrichtung 1 besitzt einen sicheren Speicher
(z.B. einen sicheren Flash) 10, umfassend einen nicht wieder
beschreibbaren Bereich 11. Der nicht wieder beschreibbare
Bereich 11 umfasst ein Schreib-Zeichen 12 für den nicht
wieder beschreibbaren Bereich. Wenn einmal eine Modus-ID in dem
sicheren Speicher 10 geschrieben ist, wird der Zeichen-Wert
des Schreib-Zeichens 12 für den nicht wieder beschreibbaren
Bereich von „WRITABLE" zu „WRITTEN" geändert, und
ein Schreiben in dem nicht wieder beschreibbaren Bereich 11 wird danach
verboten. Es sollte angemerkt werden, dass der sichere Speicher 10 und
der externe Speicher 100 aus Flash-Speichern in der vorliegenden
Ausführungsform
aufgebaut sind, allerdings ist die vorliegende Erfindung nicht hierauf
beschränkt.
Irgendein Typ eines Speichers kann verwendet werden, solange wie
er nicht flüchtig
ist.
-
Ein
Verschlüsselungsabschnitt 2 führt eine Verschlüsselung
und Entschlüsselung
von Programmen durch. Der Verschlüsselungsabschnitt 2 umfasst einen
arithmetischen Privatschlüssel-Verarbeitungsabschnitt 20 und
eine Schlüssel-Erzeugungs/Aktualisierungs-Abfolgesteuereinrichtung 30.
Der arithmetische Privatschlüssel-Verarbeitungsabschnitt 20 umfasst
Register zum Speichern von verschiedenen Schlüsseln und einer Programm-Verschlüsselungs-Grundstruktur
(ein Speicherregister 21 für einen gemeinsamen Programmschlüssel, ein
Speicherregister 22 für
einen programmeigenen Schlüssel,
ein Speicherregister 23 für einen Verschlüsselungs-Schüssel, usw.)
und ist dazu in der Lage, eine Vielzahl von Sequenzen auszuführen, umfassend Verfahren
zum Verschlüsseln
oder Entschlüsseln
von Programmen. Die Schlüssel-Erzeugungs/Aktualisierungs-Abfolgesteuereinrichtung 30 bestimmt,
ob eine Ausführung
jeder der Sequenzen, die durch den arithmetischen Privatschlüssel-Verarbeitungsabschnitt 20 ausgeführt werden
können,
zuzulassen ist, und verhindert den Betrieb des arithmetischen Privatschlüssel-Verarbeitungsabschnitts 20 in
Bezug auf eine Sequenz, deren Ausführung dahingehend bestimmt
wird, dass sie unzulässig
ist. Die Schlüssel-Erzeugungs/Aktualisierungs-Abfolgesteuereinrichtung 30 umfasst
ein Modus-ID-Speicher-Register 31.
Die Schlüssel-Erzeugungs/Aktualisierungs-Abfolgesteuereinrichtung 30 bestimmt,
ob eine Ausführung
jeder Sequenz basierend auf der Modus-ID, gespeichert in dem Modus-ID-Speicher-Register 31, zuzulassen
ist. Weiterhin umfasst die Schlüssel-Erzeugungs/Aktualisierungs-Abfolgesteuereinrichtung 30 ein
Verschlüsselungs-Typ-Identifizierer-Speicher-Register 32 zum
Speichern eines Verschlüsselungs-Typ-Identifizierers und
einen Speicherabschnitt 33 zum Speichern einer Programm-Verschlüsselungs-Grundstruktur.
Der Verschlüsselungs-Typ-Identifizierer
zeigt an, welcher Algorithmus und welche Schlüssellänge zum Verschlüsseln eines Schlüssels oder
Programms verwendet werden.
-
Eine
Modus-Abfolgesteuereinrichtung 40 umfasst auch ein Modus-ID-Speicher-Register 41. Die
Modus-Abfolgesteuereinrichtung 40 steuert die Betriebsweise
einer externen Host-Schnittstelle (I/F) 50, d.h. welche
Schnittstelle zum Lesen eines Programms oder von Daten, gespeichert
in dem externen Speicher 100, zu verwenden ist, entsprechend einer
Modus-ID, gespeichert in dem Modus-ID-Speicher-Register 41,
und den Wert eines Jumpers 43. Mit dieser Anordnung ist
es möglich,
zu steuern, ob ein grobes (binäres)
Programm, gespeichert in dem externen Speicher 100, ausgeführt werden
kann oder nicht. Die Modus-Abfolge-Steuereinrichtung 40 umfasst
weiterhin ein Verschlüsselungs-Typ-Identifizierer-Speicher-Register 42 zum
Speichern eines Verschlüsselungs-Typ-Identifizierers.
Der Verschlüsselungs-Typ-Identifizierer
zeigt an, welches Verfahren für
eine Verschlüsselung
eines Schlüssels
verwendet wird.
-
Die
externe Host-I/F 50 sendet/empfängt ein Programm oder Daten
zu/von dem externen Speicher 100 oder dem externen Tool 110 entsprechend der
Steuerung durch die Modus-Abfolge-Steuereinrichtung 40 über entweder
einen Durchgangsabschnitt 52 für eine Verschlüsselung
(nachfolgend „Verschlüsselungs-Durchgangsabschnitt 52"), einen Durchgangsabschnitt 53 zur
Ausführung
(nachfolgend „Ausführungs-Durchgangsabschnitt 53") und eine Kryptographie-Engine 54 für eine Programm-Entschlüsselung
(nachfolgend bezeichnet als eine „Programm-Entschlüsselungs-Kryptographie-Engine" 54), die
in einem Programm-Verarbeitungsabschnitt 51 enthalten ist,
oder einen Durchgangsabschnitt 56 und eine Kryptographie-Engine 57 für eine Inhalt-Verschlüsselung/Entschlüsselung,
die in einem Daten-Verarbeitungsabschnitt 55 enthalten sind.
Die Programm-Entschlüsselungs-Kryptographie-Engine 54 umfasst
ein einen programmeigenen Schlüssel
speicherndes Register 58 zum Speichern eines programmeigenen
Schlüssels,
der für
eine Entschlüsselung
eines Programms verwendet wird.
-
In
dem Schlüsselerzeugungsmodus
und dem Produkt-Operations-Modus (beschrieben später) kann ein Programm nicht
durch den Ausführungs-Durchgangsabschnitt 53 hereingenommen werden.
Das bedeutet, dass die sichere LSI-Vorrichtung so aufgebaut ist,
dass die Betriebsweise der sicheren LSI-Vorrichtung 1 nicht
zu einem Programm fortschreitet, mit der Ausnahme eines Programms, das
mit einem eigenen Schlüssel
verschlüsselt
ist, wenn sich die sichere LSI-Vorrichtung 1 in dem Schlüssel-Erzeugungsmodus oder
dem Produkt-Operations-Modus befindet.
-
Ein
Boot-ROM 60 speichert ein Boot-Programm zum Steuern eines
Boot-Up-Vorgangs
der sicheren LSI-Vorrichtung 1. Ein HASH-Berechnungsabschnitt 70 berechnet
einen HASH-Wert zum Verifizieren der Gültigkeit eines Programms, das
in die sichere LSI-Vorrichtung 1 eingelesen
ist.
-
Weiterhin
speichert der externe Speicher 100 Programme und Inhalte.
Das externe Tool 110 speichert verschiedene Anfangswerte,
die zu dem sicheren Speicher 10 zu dem Zeitpunkt des ersten Boot-Ups
der sicheren LSI-Vorrichtung 1 übertragen und in dem si cheren
Speicher 10 gespeichert werden sollen. Der Typ des Anfangswerts
variiert in Abhängigkeit
von einem ausgewählten
Betriebs-Modus.
-
2 stellt
den gesamten Ablauf einer Entwicklung und Herstellung, die die sichere
LSI-Vorrichtung 1 der 1 verwendet,
dar. Wie in 2 dargestellt ist, arbeitet
die sichere LSI-Vorrichtung 1 in den folgenden vier Betriebs-Modi:
Administrator-Modus (Modus-ID: 00), Schlüssel-Erzeugungs-Modus (Modus-ID:
01), Entwicklungs-Modus (Modus-ID:
10) und Produkt-Betriebs-Modus (Modus-ID: 11).
-
Wenn
auf den Administrator-Modus eingestellt wird, arbeitet die sichere
LSI-Vorrichtung 1 als eine
LSI-Vorrichtung für
einen Administrator (nachfolgend bezeichnet als „Administrator-LSI-Vorrichtung"). In der Administrator-LSI-Vorrichtung
wird ein Schlüssel-Erzeugungs-Programm
entwickelt (PA1) und das entwickelte Schlüssel-Erzeugungs-Programm wird unter
Verwendung irgendeines Schlüssel-Erzeugungs-Schlüssels verschlüsselt (PA2).
-
Wenn
auf den Schlüssel-Erzeugungs-Modus eingestellt
wird, arbeitet die sichere LSI-Vorrichtung 1 als eine LSI-Vorrichtung
für eine
Schlüssel-Erzeugung
(nachfolgend bezeichnet als eine „Schlüssel-Erzeugungs-LSI-Vorrichtung"). In der Schlüssel-Erzeugungs-LSI-Vorrichtung
wird das Erzeugungs-Programm für
den verschlüsselten
Schlüssel, erzeugt
in der Administrator-LSI-Vorrichtung, installiert (PB1) und das
Schlüssel-Erzeugungs-Programm wird
ausgeführt,
um verschiedene Schlüssel
(PB2) zu erzeugen.
-
Wenn
auf den Entwicklungs-Modus eingestellt ist, arbeitet die sichere
LSI-Vorrichtung 1 als eine
LSI-Vorrichtung für
eine Entwicklung (nachfolgend bezeichnet als eine „Entwicklungs-LSI-Vorrichtung"). In der Entwicklungs-LSI-Vorrichtung
wird ein Anwendungs-Programm, das in einem tatsächlichen Produkt ausgeführt werden
soll, entwickelt (PC1). Das Anwendungs-Programm wird unter Verwendung des
gemeinsamen Programmschlüssels
verschlüsselt
(PC2).
-
Wenn
auf den Produkt-Operations-Modus eingestellt wird, arbeitet die
sichere LSI-Vorrichtung 1 als
eine tatsächliche
Produkt-LSI-Vorrichtung. Das Anwendungs-Programm, erzeugt in der
Entwicklungs-LSI-Vorrichtung, und verschlüsselt mit dem gemeinsamen Programmschlüssel, wird
in der Produkt-LSI-Vorrichtung installiert. Innerhalb der Produkt-LSI-Vorrichtung wird
das installierte Anwendungs-Programm zu einem Anwendungs-Programm, verschlüsselt mit
einem programmeigenen Schlüssel (PD1),
umgewandelt.
-
Nach
der Umwandlung des Anwendungs-Programms arbeitet die sichere LSI-Vorrichtung 1 als
eine normale Produkt-LSI-Vorrichtung (PD2). Diese Umwandlungsverarbeitung
kann auch in der Entwicklungs-LSI-Vorrichtung für den Zweck eines Debugging
des Anwendungs-Programms ausgeführt
werden (PC3).
-
Nachfolgend
werden Details einer normalen Operation und einer sicheren Aktualisierungs-Operation,
die dann durchgeführt
werden, wenn sich die sichere LSI-Vorrichtung 1, die den
vorstehenden Aufbau besitzt, in dem Produkt-Operations-Modus befindet,
unter Bezugnahme auf Flussdiagramme und Datenströmungen beschrieben.
-
3 zeigt
ein Flussdiagramm, das den gesamten Ablauf des Boot-Programms darstellt.
Wenn die sichere LSI-Vorrichtung 1 hochgefahren wird, wird
das Boot-Programm,
gespeichert in dem Boot-ROM 60, durch eine CPU 65 ausgeführt. Wie 3 zeigt,
wird jede Hardware zuerst initialisiert (SZ0). Dann werden die verschiedenen
Anfangswerte von dem externen Tool 110 gelesen und in den
sicheren Speicher 10 eingestellt (SZ1).
-
4 zeigt
ein Flussdiagramm, das die den Anfangswert einstellende Verarbeitung
SZ1 darstellt. Zunächst
wird, an einer Sprungeinrichtung 44, bestimmt, ob der sichere
Speicher 10 in der LSI-Vorrichtung (SZ11) montiert ist
oder nicht. Als nächstes
wird bestimmt, ob ein Schreib-Zeichen 12 für den unbeschreibbaren
Bereich „WRITTEN" (SZ12) anzeigt oder
nicht. Wenn es „WRITTEN" (Ja an SZ12) anzeigt,
wird die Verarbeitung SZ1 beendet, da ein Anfangswert bereits in
dem sicheren Speicher 10 eingestellt ist. Wenn das Schreib-Zeichen 12 für den unbeschreibbaren
Bereich „WRITABLE" (Nein an SZ12) anzeigt,
werden Anfangswerte in den sicheren Speicher 10 hineingeschrieben
(SZ13 bis SZ18). Zusätzlich
zu der Modus-ID werden ein eigener Schlüssel für das verschlüsselte Programm,
Adressen-Verwaltungs-Informationen und ein dateneigener Schlüssel in
den unbeschreibbaren Bereich 11 des sicheren Speichers 10 hineingeschrieben
(SZ13, SZ16 bis SZ18). Falls die erste Bestimmung anzeigt, dass
der sichere Speicher 10 außerhalb der LSI-Vorrichtung (Nein
an SZ14) existiert, wird die Modus-ID mit einem Wert überschrieben,
der den Produkt-Operations-Modus anzeigt (SZ15). Als eine Folge
arbeitet ein Produkt, das einen sicheren Speicher 10 außerhalb
seiner LSI-Packung besitzt, nur dann, wenn es sich in dem Produkt-Operations-Modus
befindet.
-
Als
nächstes
wird das Schreib-Zeichen 12 für den unbeschreibbaren Bereich
auf „WRITTEN" gesetzt (SZ19),
wodurch ein Überschreiben
in dem nicht wieder überschreib baren
Bereich 11 danach verhindert wird. Weiterhin werden ein
Verschlüsselungs-Typ-Identifizierer und
ein Installations-Modus-Zeichen in allgemeinen Bereichen 13 und 14 geschrieben
(SZ1A). Wenn die Modus-ID einen Modus, einen anderen als den Administrator-Modus (Nein an SZ1B),
anzeigt, werden ein verschlüsselter,
gemeinsamer Schlüssel
und ein Erzeugungs-Schlüssel
für einen
verschlüsselten
Schlüssel
in die allgemeinen Bereiche 13 und 14 zusätzlich zu
dem Verschlüsselungs-Typ-Identifizierer
und einem Installations-Modus-Zeichen
geschrieben (SZ1C).
-
Danach
wird eine Vorverarbeitung SZ2 ausgeführt. Hierbei wird die Modus-ID,
eingestellt in dem nicht wieder beschreibbaren Bereich 11 des
sicheren Speichers 10, in das Modus-ID-Speicher-Register 31 der
Schlüssel-Erzeugungs-Aktualisierungs-Abfolgesteuereinrichtung 30 und
in das Modus-ID-Speicher-Register 41 der Modus-Abfolgesteuereinrichtung 40 eingestellt.
Weiterhin wird ein Verschlüsselungs-Typ-Identifizierer, eingestellt
in dem allgemeinen Bereich 13 des sicheren Speichers 10,
in dem Verschlüsselungs-Typ-Identifizierer-Speicher-Register 32 der
Schlüssel-Erzeugungs/Aktualisierungs-Abfolgesteuereinrichtung 30 und
in dem Verschlüsselungs-Typ-Identifizierer-Speicher-Register 42 der Modus-Abfolgesteuereinrichtung 40 eingestellt.
Weiterhin werden die Adressen-Verwaltungs-Informationen, gespeichert
in dem unbeschreibbaren Bereich 11 des sicheren Speichers 10,
in einem Verschlüsselungs-Adressen-Segment-Speicher-Register 81 eines
MEMC 80 eingestellt. Die Vorgänge, beschrieben vorstehend,
entsprechen den Anfangs-Wert-Einstell-Phasen PA0, PB0, PC0 und PD0
von 2.
-
Danach
wird der Vorgang in einem Modus, bestimmt gemäß dem Wert der Modus-ID, durchgeführt (SZ3).
Demzufolge wird die Geheimhaltung eines Programms durch Begrenzen
des Vorgangs, durchgeführt
in einer sicheren LSI-Vorrichtung, entsprechend dem Wert der Modus-ID,
verbessert.
-
Als
nächstes
wird eine normale Produkt-Operation (normaler Boot-Vorgang) im Detail beschrieben.
-
Wenn
die Modus-ID „11" ist, wird die sichere LSI-Vorrichtung 1 auf
den Produkt-Operations-Modus
eingestellt, um eine Programm-Installations-Verarbeitung SD1 oder
eine normale Boot-Verarbeitung SD2, in Abhängigkeit von dem Wert des Installations-Modus-Zeichens (bestimmt
bei SD0), auszuführen.
-
5 zeigt
ein Flussdiagramm einer Programm-Installations-Verarbeitung SD1. 6 und 7 stellen
einen Datenfluss einer Programm-Installations-Verarbeitung SD1 dar.
In der Programm-Installations-Verarbeitung SD1 wird ein programmeigener
Schlüssel
unter Verwendung von Informationen über den eigenen Schlüssel, gespeichert
in dem sicheren Speicher 10, entschlüsselt (SD11 und SD12), und
ein gemeinsamer Programmschlüssel
wird unter Verwendung der Informationen über den gemeinsamen Schlüssel entschlüsselt (SD13
und SD14). Der gemeinsame Schlüssel
für das
entschlüsselte
Programm und der eigene Schlüssel
für das
entschlüsselte
Programm werden dazu verwendet, ein Programm Enc (Programm, gemeinsamer
Programmschlüssel),
die in dem externen Speicher 100 gespeichert ist, in ein
Programm Enc (Programm, programmeigener Schlüssel) umzuwandeln (SD15 bis
SD17). Danach wird die Gültigkeit des
Programms verifiziert (SD18). Falls es gültig ist, wird das Installations-Modus-Zeichen
auf AUS gesetzt (SD19). Mit dieser Einstellung wird die Programm-Installations-Verarbeitung
SD1 nicht weiter zum Zeitpunkt eines Bootens der sicheren LSI-Vorrichtung 1 durchgeführt. An
dem Ende der Programm-Installations-Verarbeitung SD1 werden der gemeinsame
Schlüssel
für das
Programm, gespeichert in dem sicheren Speicher 10, und
das Programm Enc (Programm, gemeinsamer Programmschlüssel), gespeichert
in dem externen Speicher 100, gelöscht (SD1A und SD1B).
-
8 zeigt
ein Flussdiagramm einer normalen Boot-Verarbeitung SD2. Die 9 und 10 stellen
einen Datenablauf einer normalen Boot-Verarbeitung SD2 dar. In einer
normalen Boot-Verarbeitung SD2 werden ein für ein verschlüsseltes
Programm eigener Schlüssel
(Informationen über
den eigenen Schlüssel),
gespeichert in einem nicht wiederbeschreibbaren Bereich 11 des
sicheren Speichers (internen Speichers) 10, d.h. ein verschlüsselter,
eigener Schlüssel
Enc (programmeigener Schlüssel (Ursprung),
MK0 (dritter Ursprungs-Zwischenschlüssel)), und ein verschlüsselter,
zweiter Zwischenschlüssel
Enc (MK0, CK0 (vierter Ursprungs-Zwischenschlüssel)) in einem Verschlüsselungsschlüssel-Speicher-Register
des arithmetischen Verarbeitungs-Abschnitts 20 für den privaten
Schlüssel
eingestellt (SD21). Dann wird der eigene Schlüssel für das verschlüsselte Programm
unter Verwendung der Programm-Verschlüsselungs-Ursprungs-Struktur,
installiert in der Schlüssel-Erzeugungs-Aktualisierungs-Abfolgesteuereinrichtung 30,
entschlüsselt, wodurch
ein programmeigener Schlüssel
erhalten wird (SD22). Der erhaltene für das Programm eigene Schlüssel wird
in dem Speicher-Register 22 für den programmeigenen Schlüssel des
arithmetischen Verarbeitungs-Abschnitts 20 für den privaten
Schlüssel und
in dem Schlüssel-Speicher-Register 48 für den programmeigenen
Schlüssel
der Programm-Entschlüsselungs-Kryptographie-Engine 54 der
externen Host-I/F 50 eingestellt (SD23).
-
Danach
wird eine dateneigene ID, gespeichert in dem nicht wieder überschreibbaren
Bereich 11 des sicheren Speichers 10, in dem Speicher-Register
für die
eigene ID des arithmetischen Verarbeitungs-Abschnitts 20 für den privaten
Schlüssel
eingestellt (SD24). Weiterhin werden Zufalls-Zahlen durch die CPU 65 erzeugt
und die erzeugten Zufalls-Zahlen werden
in dem Zufalls-Zahl-Speicher-Register des arithmetischen Verarbeitungs-Abschnitts 20 für den privaten
Schlüssel
eingestellt (SD25). Dann wird ein für die Daten eigener Schlüssel von
der für
die Daten eigenen ID und die Zufalls-Zahlen durch den arithmetischen
Verarbeitungs-Abschnitt 20 für den privaten Schlüssel erzeugt
(SD26). Eine Reproduktion eines Inhalts wird unter Verwendung des
für die
Daten eigenen Schlüssels
durchgeführt.
Da der für
die Daten eigene Schlüssel
unter Verwendung von Zufalls-Zahlen
erzeugt wird, unterscheidet sich der für die Daten eigene Schlüssel bei
jedem Hochfahren. Demzufolge wird die Sicherheit in der Reproduktion
des Inhalts verbessert.
-
Danach
wird ein Programm, verschlüsselt mit
einem für
das Programm eigenen Schlüssel
Enc (Programm, programmeigener Schlüssel), der in dem externen
Speicher 100 gespeichert ist, über die Programm-Entschlüsselungs-Kryptographie-Engine 54 des
Programm-Verarbeitungs-Abschnitts 51 der externen Host-I/F 50 entschlüsselt. Das
entschlüsselte
Programm wird zu dem Hash-Berechnungs-Abschnitt 70 übertragen,
um den Hash-Wert zu berechnen (SD27). Der für das Programm eigene Schlüssel, gespeichert
in dem Speicher-Register 58 für den programmeigenen Schlüssel der
externen Host-I/F 50, wird zur Entschlüsselung verwendet. Der berechnete Hash-Wert
wird mit dem Hash-Wert, gespeichert in dem allgemeinen Bereich 13 des
sicheren Speichers 10, verglichen, um zu prüfen, ob
das Anwendungs-Programm missbraucht worden ist oder nicht (SD28).
Falls die Hash-Werte gleich zueinander sind (Nein bei SD29), geht
der Vorgang weiter zu dem Programm Enc (Programm, programmeigener Schlüssel), gespeichert
in dem externen Speicher 100, um eine Anwendung auszuführen (SD2A).
Falls die Hash-Werte nicht gleich zueinander sind, wird bestimmt,
dass ein bestimmter Missbrauch vorgenommen worden ist, und ein Missbrauch-Zugangs-Kontroll-Vorgang
wird ausgeführt
(SD2B).
-
Die
Verarbeitung einer Aktualisierung eines Programms in einer sicheren
LSI-Vorrichtung,
die als ein Produkt so arbeitet, wie dies vorstehend beschrieben
ist, wird nun unter Bezugnahme auf 11 beschrieben. 11 stellt
einen Ablauf dar, der ein Senden von Daten zwischen dem Server 3 und
einem System, umfassend die sichere LSI-Vorrichtung 1, in einer Programm-Aktualisierungs-Verarbeitung darstellt.
-
Wie 11 zeigt,
empfängt,
nachdem die sichere LSI-Vorrichtung 1 die Programm-Aktualisierungs-Verarbeitung
startet, der Server 3 eine ID von der sicheren LSI-Vorrichtung 1 von
dem System, um eine ID-Authentifizierung durchzuführen. Wenn
die ID gültig
ist, wird der Server 3 mittels SLL mit der sicheren LSI-Vorrichtung 1 verbunden
(UD1). Mit einem solchen Vorgang wird die Sicherheit des Kommunikations-Pfads
zwischen dem Server 3 und dem System, umfassend die sichere
LSI-Vorrichtung 1, in einem gewissen Umfang gesichert.
-
Nachdem
der Kommunikations-Pfad gesichert ist, sendet das System eine Anwendungs-ID, die
eine Identifikations-Information eines Programms, das aktualisiert
werden soll (nachfolgend bezeichnet als „Aktualisierungs-Objekt-Programm"), ist, zu dem Server 3 (UD2).
Der Server 3 verwaltet eine erste Tabelle A 4,
die Korrespondenzen zwischen Anwendungs-IDs von Aktualisierungs-Programmen
und IDs von LSI-Vorrichtungen, auf denen ein Programm zugelassen
ist, um ausgeführt
zu werden, anzeigt. Der Server 3 bestimmt, ob ein Programm übertragen
werden kann oder nicht, und zwar basierend auf der ersten Tabelle
A 4. Nachdem eine Korrespondenz zwischen der ID der sicheren LSI-Vorrichtung 1 und
einer Anwendungs-ID eines Programms, das anfordert, aktualisiert
zu werden, geprüft
ist, beginnt der Server 3 mit einer Übertragung des Aktualisierungs-Objekt-Programms.
-
Zuerst
sendet der Server 3 zusätzliche
Informationen des Aktualisierungs-Objekt-Programms zu der sicheren LSI-Vorrichtung 1 (UD3).
Hierbei umfassen die zusätzlichen
Informationen eine Signatur zum Authentifizieren, ob ein Programm
zugelassen ist oder nicht, in der sicheren LSI-Vorrichtung 1 aktualisiert
zu werden, die Größe des Aktualisierungs-Objekt-Programms,
den Hash-Wert (Ursprungs-Hash-Wert) des Aktualisierungs-Objekt-Programms,
usw. Die sichere LSI-Vorrichtung 1 führt eine Authentifizierung
unter Verwendung einer Signatur, gesendet als zusätzliche
Informationen, durch, und bestimmt, ob der externe Speicher 10 einen
aktualisierbaren, freien Raum besitzt oder nicht, und zwar basierend
auf der gesendeten Programm-Größe. Falls
bestimmt ist, dass die Aktuali sierung möglich ist, fordert die sichere
LSI-Vorrichtung 1 von dem Server 3, die gemeinsamen
Schlüssel-Informationen zu übertragen
(UD4).
-
Unter
einem Empfangen der Anforderung sendet der Server 3 die
Informationen über
den gemeinsamen Schlüssel,
umfassend einen verschlüsselten,
gemeinsamen Schlüssel
Enc (gemeinsamer Programmschlüssel
(grob bzw. Ursprung), MK1, einen ersten Ursprungs-Zwischenschlüssel)) und
einen verschlüsselten,
ersten Zwischenschlüssel
Enc (MK1, CK1 (zweiter Ursprungs-Zwischenschlüssel)) zu der sicheren LSI-Vorrichtung 1 (UD5).
Die sichere LSI-Vorrichtung 1 entschlüsselt den für das Programm gemeinsamen
Schlüssel
unter Verwendung der Informationen über den gemeinsamen Schlüssel, und
die Hash-Berechnung wird in Bezug auf den für das entschlüsselte Programm
gemeinsamen Schlüssel
durchgeführt,
um die Gültigkeit
des gemeinsamen Schlüssels
für das
Programm zu verifizieren. Nachdem der gemeinsame Schlüssel für das Programm erfolgreich
entschlüsselt
ist, fordert das System den Server 3 auf, ein verschlüsseltes
Programm für
den gemeinsamen Schlüssel
zu senden (UD6). Unter Empfang der Anforderung sendet der Server 3 ein Programm
Enc (Programm, für
den Programm gemeinsamen Schlüssel)
zu dem System (UD7). Die sichere LSI-Vorrichtung 1 wandelt
das Programm Enc (Programm, gemeinsamer Programmschlüssel) zu Enc
(Programm, programmeigener Schlüssel)
um. Weiterhin entschlüsselt
die sichere LSI-Vorrichtung 1 das umgewandelte Programm
(Programm, programmeigener Schlüssel)
zu einem Ursprungs-Programm um. Dann führt die sichere LSI-Vorrichtung 1 eine
Hash-Berechnung in Bezug auf das Ursprungs-Programm durch und vergleicht
den erhaltenen Hash-Wert mit einem Hash-Wert, der zuvor empfangen
ist, als zusätzliche
Informationen, um die Gültigkeit
des Programms zu verifizieren. Die vorstehende Verarbeitung wird
später
im Detail beschrieben.
-
Nachdem
das verschlüsselte
Programm für den
gemeinsamen Schlüssel
erfolgreich zu einem verschlüsselten
Programm für
den eigenen Schlüssel
umgewandelt ist, fordert das System, das die sichere LSI-Vorrichtung 1 umfasst,
den Server 3 auf, für
die Anwendung eigene Informationen zu übertragen (UD8). Die für die Anwendung
eigenen Informationen umfassen Informationen, die zum Ausführen eines
Programms notwendig sind. Demzufolge kann die sichere LSI-Vorrichtung 1 nicht
ein Aktualisierungs-Programm ohne die für die Anwendung eigenen Informationen
ausführen.
Der Server 3 verwaltet auch eine zweite Tabelle B 5,
die Korrespondenzen zwischen einer Sende-Historik der für die Anwendung
eigenen Informationen und den IDs der LSI-Vorrichtungen anzeigt.
Der Server 3 sendet nicht eine Vielzahl von Teilen von
für die
Anwendung eigenen Informationen zu derselben, sicheren LSI-Vorrichtung.
Demzufolge kann eine einzelne, sichere LSI-Vorrichtung nicht ein Programm mehr
als einmal aktualisieren.
-
Wenn
bestimmt ist, dass die für
die Anwendung eigenen Informationen gesendet werden können, sendet
der Server 3 die für
die Anwendung eigenen Informationen zu dem System, umfassend die
sichere LSI-Vorrichtung 1 (UD9). Die sichere LSI-Vorrichtung 1 führt eine
Hash-Berechnung in Bezug auf die für die Anwendung eigenen Informationen
durch, um die Gültigkeit
der für
die Anwendung eigenen Informationen zu verifizieren, wodurch die
Programm-Aktualisierungs-Verarbeitung abgeschlossen ist. Die Kommunikation
zwischen der sicheren LSI-Vorrichtung 1 und dem Server 3 wird
unterbrochen (UD10).
-
Es
sollte angemerkt werden, dass ein Senden von Daten zwischen der
sicheren LSI-Vorrichtung 1 und dem Server 3 gemäß der vorliegenden
Erfindung nicht auf den vorstehend beschriebenen Datenfluss beschränkt ist.
Zum Beispiel muss der Server 3 nicht notwendigerweise die
zweite Tabelle B 5 verwalten, so dass eine Vielzahl von
Teilen der für
die Anwendung eigenen Informationen zu derselben, sicheren LSI übertragen
werden können.
Allerdings wird die Geheimhaltung eines Programms weiter verbessert,
wenn ein einzelnes Programm nicht zu derselben, sicheren LSI mehr
als einmal übertragen wird.
-
Weiterhin
werden die zusätzlichen
Informationen, Informationen über
den gemeinsamen Schlüssel
und das verschlüsselte
Programm für
den gemeinsamen Schlüssel
nicht immer von dem Server 3 zu der sicheren LSI-Vorrichtung 1 getrennt übertragen.
Zum Beispiel kann ein Teil der Gesamtheit dieser Daten zu einem
Zeitpunkt in der Form eines Programm-Datenpakets übertragen
werden.
-
Die
Umwandlung von dem verschlüsselten Programm
für den
gemeinsamen Schlüssel
Enc (Programm, gemeinsamer Programmschlüssel) zu dem verschlüsselten
Programm für
den eigenen Schlüssel
Enc (Programm, programmeigener Schlüssel) der sicheren LSI-Vorrichtung 1 wird
nun im Detail unter Bezugnahme auf die Zeichnungen beschrieben. 12 stellt
eine Struktur eines Programms, verwendet in Verbindung mit der Programm-Aktualisierung,
das in dem externen Speicher 100 gespeichert ist, dar.
-
Wie 12 zeigt,
speichert der externe Speicher 100 ein Verschlüsselungs-Steuerprogramm (Enc
(Steuerprogramm, für
das Programm eigener Schlüssel)) 200 und
ein Verschlüsselungs-Anwendungs-Programm
(Enc (Anwendungs-Programm, programmeigener Schüssel)) 210, die mit
einem eigenen Schlüssel
verschlüsselt
worden sind.
-
Das
Verschlüsselungs-Steuerprogramm 200 umfasst
einen Anwendungs-Boot-Up-Abschnitt 201 und
einen Programm-Aktualisierungs-Steuerabschnitt 205. Der
Programm-Aktualisierungs-Steuerabschnitt 205 umfasst
einen Entschlüsselungs-Abschnitt 206 für den gemeinsamen
Schlüssel,
einen Verschlüsselungs-Verarbeitungs-Abschnitt 207 für den programmeigenen
Schlüssel
und einen Programm-Aktualisierungs-Erfolg/Fehler-Bestimmungs-Abschnitt 208.
-
Der
Anwendungs-Boot-Up-Abschnitt 201 empfängt eine Anwendung von einem
Boot-Programm, gespeichert in dem Boot-ROM 60, um das Verschlüsselungs-Anwendungs-Programm 210 hochzufahren.
Der Entschlüsselungs-Abschnitt 206 für den gemeinsamen
Schlüssel
entschlüsselt
den für
das Programm gemeinsamen Schlüssel
unter Verwendung der Schlüssel-Erzeugungs/Aktualisierungs-Abfolgesteuereinrichtung 30 basierend
auf den Informationen über
den gemeinsamen Schlüssel, übertragen
von dem Server 3 aus. Der Verschlüsselungs-Verarbeitungs-Abschnitt 207 für den für das Programm
eigenen Schlüssel
wandelt das verschlüsselte
Programm für
den gemeinsamen Schlüssel
Enc (Programm, gemeinsamer Programmschlüssel) zu dem verschlüsselten
Programm für
den eigenen Schlüssel
Enc (Programm, programmeigener Schlüssel) unter Verwendung der
Schlüssel-Erzeugungs/Aktualisierungs-Abfolgesteuereinrichtung 30 um.
Der Programm-Aktualisierungs-Erfolg/Fehler-Bestimmungs-Abschnitt 208 entschlüsselt das entschlüsselte Programm
für den
eigenen Schlüssel Enc
(Programm, programmeigener Schlüssel)
zu einem Ursprungs-Programm und führt eine Hash-Verifizierung
in Bezug auf das Ursprungs-Programm durch, um zu bestimmen, ob die
Programm-Aktualisierung erfolgreich vorgenommen worden ist oder nicht.
Falls sie erfolgreich ist, wird das alte Programm gelöscht, und
Informationen, umfassend eine Adresse, wo das aktualisierte Programm
gespeichert ist, die Größe des aktualisierten
Programms, usw., werden in dem sicheren Speicher 10 gespeichert.
-
Das
Verschlüsselungs-Anwendungs-Programm 210 umfasst
einen allgemeinen Betriebsabschnitt 211, der ein allgemeines
Anwendungs-Programm ist, und einen Programm-Akquisitions-Abschnitt 212,
der ein Anwendungs-Programm ist, verwendet zum Akquirieren eines
neuen Anwendungs-Programms von einem Server oder einem Aufzeichnungs-Medium.
Solche Programme, gespeichert in dem externen Speicher 100,
werden für
eine Programm-Aktualisierung verwendet.
-
13 zeigt
ein Flussdiagramm einer Programm-Aktualisierungs-Verarbeitung, die
eine Umwandlungs-Verarbeitung von einem verschlüsselten Programm für den gemeinsamen
Schlüssel
zu einem verschlüsselten
Programm für
einen eigenen Schlüssel
umfasst.
-
Wenn
eine Aktualisierung eines Programms von einem externen Faktor, wie
beispielsweise einem Vorgang eines Benutzers, oder dergleichen,
während der
Ausführung
eines Anwendungs-Programms gefordert wird (SX1), erfasst das System
die Anforderung, und der allgemeine Betriebsabschnitt 211 aktiviert
den Programm-Akquisitions-Abschnitt 212, der ein Akquisitions-Programm
des Verschlüsselungs-Anwendungs-Programms 210 ist,
um eine Programm-Aktualisierungs-Verarbeitung zu starten (SX2).
-
Der
Programm-Akquisitions-Abschnitt 212 richtet eine Kommunikation
mit dem Server 3 ein, um eine Authentifizierung einzurichten
und Informationen über
den gemeinsamen Schlüssel
und Programme zu akquirieren (SX3). Unter Akquirieren der Informationen über den
gemeinsamen Schlüssel
von dem Server 3 entschlüsselt der Entschlüsselungs-Abschnitt 206 für den gemeinsamen
Schlüssel
den für das
Programm gemeinsamen Schlüssel
(SX4 und SX5). Genauer gesagt werden die Informationen über den
gemeinsamen Schlüssel,
d.h. ein gemeinsamer Schlüssel
für das
verschlüsselte
Programm (Enc, für
das Programm gemeinsamer Schlüssel, MK2)
und Enc (MK2, CK)), in dem Verschlüsselungs-Schlüssel-Speicher-Register 23 des
arithmetischen Verarbeitungs-Abschnitts 20 für den privaten Schlüssel eingestellt.
Der gemeinsame Schlüssel
für das
verschlüsselte
Programm wird unter Verwendung der Programm-Verschlüsselungs-Ursprungs-Struktur,
installiert in der Schlüssel-Erzeugungs/Aktualisierungs-Abfolgesteuereinrichtung 30, entschlüsselt, um
einen gemeinsamen Schlüssel
für das
Programm zu erhalten. Der erhaltene, gemeinsame Schlüssel für das Programm
wird in dem Speicher-Register 21 für den für das Programm gemeinsamen
Schlüssel
des arithmetischen Verarbeitungs-Abschnitts 20 für den privaten
Schlüssel
gespeichert.
-
Dann
führt der
Verschlüsselungs-Verarbeitungs-Abschnitt 207 des
programmeigenen Schlüssels
eine Umwandlungs-Verarbeitung von einem verschlüsselten Programm für den gemeinsamen Schlüssel zu
einem verschlüsselten
Programm für den
eigenen Schlüssel
durch. Genauer gesagt wird ein Programm Enc (Programm, für das Programm gemeinsamer
Schlüssel),
das von dem Server 3 übertragen
worden ist und in dem externen Speicher 100 gespeichert
ist, zu dem arithmetischen Verarbeitungs-Abschnitt 20 für den privaten
Schlüssel über den
Verschlüsselungs-Durchgangs-Abschnitt 52 des Programm-Verarbeitungs-Abschnitts 51,
umfasst in der externen Host-I/F 50, übertragen (SX6). Das übertragene
Programm wird mit dem für
das Programm gemeinsamen Schlüssel,
gespeichert in dem Speicher-Register 21 für den für das Programm
gemeinsamen Schlüssel,
entschlüsselt,
und dann mit dem für
das Programm eigenen Schlüssel,
gespeichert in dem Speicher-Register 22 für den für das Programm
eigenen Schlüssel,
verschlüsselt,
wodurch ein Programm Enc (Programm, programmeigener Schlüssel) erhalten
wird. Es sollte angemerkt werden, dass der für das Programm eigene Schlüssel bereits
zu dem Zeitpunkt eines Hochfahrens des Systems, wie vorstehend beschrieben
ist, entschlüsselt
worden ist und in dem Speicher-Register 22 für den für das Programm
eigenen Schlüssel
des arithmetischen Verarbeitungs-Abschnitts 20 für den privaten
Schlüssel
gespeichert worden ist.
-
Zuletzt
bestimmt der Programm-Aktualisierungs-Erfolg/Fehler-Bestimmungs-Abschnitt 208,
ob die Programm-Aktualisierung erfolgreich vorgenommen worden ist
oder nicht. Genauer gesagt wird das Programm Enc (Programm, programmeigener Schlüssel) in
den externen Speicher 100 geschrieben (SX8), das Programm
wird unter Verwendung der Programm-Entschlüsselungs-Kryptographie-Engine 54 des
Programm-Verarbeitungs-Abschnitts 51, umfasst
in der externen Host-I/F 50, entschlüsselt (SX9), und der Hash-Wert des entschlüsselten
Programms, d.h. des Ursprungs-Programms, wird berechnet (SX10).
Der berechnete Hash-Wert wird mit einem Hash-Wert, erhalten durch
den Programm-Akquisitions-Abschnitt 212, zusammen mit dem
verschlüsselten
Programm, verglichen, um dadurch zu bestimmen, ob die Aktualisierungs-Verarbeitung
erfolgreich vorgenommen worden ist oder nicht (SX11). Falls sie
erfolgreich ist, wird das alte Programm gelöscht (SX12). Falls sie fehlgeschlagen
ist, wird das gesendete Programm gelöscht (SX13). Dann werden Informationen,
umfassend eine Adresse, wo das aktualisierte Programm gespeichert
ist, die Größe des aktualisierten
Programms, usw., in dem sicheren Speicher 10 gespeichert
(SX14), wodurch die Aktualisierungs-Verarbeitung abgeschlossen ist.
-
In
dem Fall, in dem das verschlüsselte
Programm des für
das Programm gemeinsamen Schlüssels
von dem Server, unter Verwendung des vorstehenden Programm-Adressierungs-Verfahrens, übertragen
wird, wird ein Schlüssel,
verwendet zur Verschlüsselung,
von einem für
das Programm gemeinsamen Schlüssel
zu einem für
das Programm eigenen Schlüssel,
und installiert in dem System, geändert. Demzufolge wird, gerade
wenn auf den Kommunikations-Pfad zwischen dem Server und der sicheren
LSI-Vorrichtung
missbräuchlich
zugegriffen ist, und das verschlüsselte
Programm für
das Programm gemeinsamer Schlüssel
gestohlen ist, der sicheren LSI-Vorrichtung nicht ermöglicht,
mit diesem Programm zu arbeiten. Weiterhin sind, als eine Folge
einer Programm-Aktualisierung,
Programme, installiert in unterschiedlichen Benutzer-Produkten,
solche Programme, die mit unterschiedlichen, eigenen Schlüsseln verschlüsselt sind,
und demzufolge wird die Vertraulichkeit verbessert. Weiterhin kann,
gerade dann, wenn ein Chiffrierer (eine Verschlüsselung) aufgedeckt ist, die
Anzahl von Produkten, die beschädigt
werden kann, begrenzt werden, und deshalb wird die Sicherheit, verglichen
mit herkömmlichen
Techniken, verbessert.
-
In
der vorliegenden Ausführungsform
werden die Informationen über
den gemeinsamen Schlüssel
von dem Server erhalten. Dies kommt daher, dass der gemeinsame Schlüssel für das entschlüsselte Programm
und die Informationen über den
gemeinsamen Schlüssel,
gespeichert in dem sicheren Speicher 10, in dem letzten
Schritt einer Programm-Installations-Verarbeitung (SD1) gelöscht werden,
die in dem Produkt-Operations-Modus „11" durchgeführt wird.
Falls diese nicht gelöscht
werden, ist es nicht notwendig, die Informationen über den
gemeinsamen Schlüssel
von dem Server zu erhalten, und die Informationen über den
gemeinsamen Schlüssel
können
von dem sicheren Speicher 10 gelesen und entschlüsselt werden.
-
Weiterhin
wird, in der vorliegenden Ausführungsform,
ein Start einer Programm-Aktualisierungs-Verarbeitung
durch einen externen Faktor angewiesen, der allgemeine Operations-Abschnitt 211 aktiviert
den Programm-Akquisitions-Abschnitt 212, und danach wird
ein Programm akquiriert, wobei jeweilige Vorgänge durch ein Boot-Programm
angewiesen werden. Allerdings ist die vorliegende Erfindung nicht
hierauf beschränkt.
Zum Beispiel verbessert eine Struktur, bei der das Boot-Programm
den Programm-Akquisitions-Abschnitt 212 aktiviert,
weiterhin die Sicherheit.
-
Weiterhin
ist der für
das Programm eigene Schlüssel
nicht notwendigerweise einzigartig für jedes Produkt, sondern kann
einzigartig für
jeden Produkt-Typ oder für
jeden Satz von Produkten sein. Die Absicht der vorliegenden Erfindung
ist es, die Beschädigung
zu verringern, die dann verursacht werden kann, wenn eine Chiffrierung
(Verschlüsselung) in
einem Produkt gestört
wird. Die Effekte der vorliegenden Erfindung werden ausreichend durch
Verringern der Anzahl von LSI-Vorrichtungen erreicht, die Programme
haben, die mit demselben Schlüssel
verschlüsselt
sind. Weiterhin wird, gerade wenn der für das Programm eigene Schlüssel gemeinsam
unter allen Produkten ist, der Kommunikations-Pfad gestört bzw.
unterbrochen, und das mit dem gemeinsamen Schlüssel verschlüsselte Programm
wird gestohlen, wobei einer sicheren LSI-Vorrichtung nicht ermöglicht wird,
ohne irgendeine zusätzliche
Verarbeitung zu arbeiten. Demzufolge können die ausreichenden Effekte
nur durch Ändern
des Verschlüsselungsschlüssels von
einem gemeinsamen Schlüssel zu
einem eigenen Schlüssel
erreicht werden.
-
Wie
vorstehend beschrieben ist, kann, gemäß der vorliegenden Erfindung,
gerade in sicheren LSI-Vorrichtungen mit einer hohen Geheimhaltung, wenn
ein Programm erneut mit einem eigenen Schlüssel verschlüsselt wird,
der für
jede LSI-Vorrichtung einzigartig ist, bevor es ausgeführt wird,
eine Aktualisierung des Programms nur durch Übertragen desselben Programms
von dem Server aus erreicht werden.
-
Weiterhin
wird; gerade wenn auf den Kommunikations-Pfad zwischen dem Server
und der sicheren LSI-Vorrichtung missbräuchlich zugegriffen wird, und
das mit dem gemeinsamen Schlüssel
verschlüsselte
Programm gestohlen wird, der sicheren LSI-Vorrichtung nicht ermöglicht,
mit dem Programm zu arbeiten, und deshalb wird die Vertraulichkeit
verbessert. Weiterhin wird, gerade wenn der missbräuchliche
Chiffrierer (die Verschlüsselung)
aufgedeckt wird, die Anzahl von Produkten, die beschädigt werden
kann, begrenzt, und deshalb wird die Sicherheit, verglichen mit
den herkömmlichen
Techniken, verbessert.
-
Darüber hinaus
wird die Gültigkeit
eines gemeinsamen Schlüssels
oder eines Programms, empfangen von dem Server, unter Verwendung
eines Ursprungs-Hash-Werts verifiziert. Demzufolge ist ein Missbrauch
des Ursprungs-Hash-Werts schwierig verglichen mit dem Missbrauch
eines verschlüsselten
Hash-Werts in dem Kommunikations-Pfad. Deshalb wird die Sicherheit
verbessert.