KR20020079349A - 컴퓨터 디바이스 인증을 위한 방법 및 시스템 - Google Patents

컴퓨터 디바이스 인증을 위한 방법 및 시스템 Download PDF

Info

Publication number
KR20020079349A
KR20020079349A KR1020010074846A KR20010074846A KR20020079349A KR 20020079349 A KR20020079349 A KR 20020079349A KR 1020010074846 A KR1020010074846 A KR 1020010074846A KR 20010074846 A KR20010074846 A KR 20010074846A KR 20020079349 A KR20020079349 A KR 20020079349A
Authority
KR
South Korea
Prior art keywords
key
application
encryption
cryptographic
client
Prior art date
Application number
KR1020010074846A
Other languages
English (en)
Other versions
KR100879907B1 (ko
Inventor
아브그랄장-폴
볼드윈로버트더블유.
바아존디.
카실라스조세에이.
자블론데이비드피.
마키티모시제이.
코트라판나가
왕카이
윌리암스스티븐디.
Original Assignee
피닉스 테크놀로지 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 피닉스 테크놀로지 리미티드 filed Critical 피닉스 테크놀로지 리미티드
Publication of KR20020079349A publication Critical patent/KR20020079349A/ko
Application granted granted Critical
Publication of KR100879907B1 publication Critical patent/KR100879907B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/575Secure boot
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/73Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information by creating or determining hardware identification, e.g. serial numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/74Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information operating in dual or compartmented mode, i.e. at least one secure mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/79Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/86Secure or tamper-resistant housings
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/06Network architectures or network communication protocols for network security for supporting key management in a packet data network
    • H04L63/062Network architectures or network communication protocols for network security for supporting key management in a packet data network for key distribution, e.g. centrally by trusted party
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/12Applying verification of the received information
    • H04L63/123Applying verification of the received information received data contents, e.g. message integrity
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/0838Key agreement, i.e. key establishment technique in which a shared key is derived by parties as a function of information contributed by, or associated with, each of these
    • H04L9/0841Key agreement, i.e. key establishment technique in which a shared key is derived by parties as a function of information contributed by, or associated with, each of these involving Diffie-Hellman or related key agreement protocols
    • H04L9/0844Key agreement, i.e. key establishment technique in which a shared key is derived by parties as a function of information contributed by, or associated with, each of these involving Diffie-Hellman or related key agreement protocols with user authentication or key authentication, e.g. ElGamal, MTI, MQV-Menezes-Qu-Vanstone protocol or Diffie-Hellman protocols using implicitly-certified keys
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0891Revocation or update of secret information, e.g. encryption key update or rekeying
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0894Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2105Dual mode as a secondary aspect
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2129Authenticate client device independently of the user
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2141Access rights, e.g. capability lists, access control lists, access tables, access matrices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2145Inheriting rights or properties, e.g., propagation of permissions or restrictions within a hierarchy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2147Locking files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2149Restricted operating environment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2153Using hardware token as a secondary aspect
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/20Manipulating the length of blocks of bits, e.g. padding or block truncation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/34Encoding or coding, e.g. Huffman coding or error correction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/56Financial cryptography, e.g. electronic payment or e-cash
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/60Digital content management, e.g. content distribution
    • H04L2209/603Digital right managament [DRM]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2463/00Additional details relating to network architectures or network communication protocols for network security covered by H04L63/00
    • H04L2463/061Additional details relating to network architectures or network communication protocols for network security covered by H04L63/00 applying further key derivation, e.g. deriving traffic keys from a pair-wise master key

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Storage Device Security (AREA)

Abstract

보호 비휘발성 메모리내에 기억된 마스터 키를 사용하는 디바이스 인증용 시스템 및 방법. 마스터 키는 컴퓨터 시스템의 특정 작동모드내에서만 단지 액세스될 수 있는 기억소자로 전송된 기밀 데이터를 유도하기 위하여 사용된다. 기밀 데이터 및 마스터 키는 특정 작동 모드에서 실행되고 있지 않는 프로그램에 의해서는 직접적으로 액세스될 수 없다. 마스터 키는 애플리케이션/디바이스 페어에 특정된 데이터를 보증하기 위하여 사용되는 하나 또는 그 이상의 애플리케이션 키를 끌어내기 위하여 사용된다. 비-특정 프로그램은 이러한 애플리케이션 키를 사용하기 위하여 특정 모드내에서 실행되는 기능을 요청할 수 있다. 특정 모드 프로그램은 각각의 요청된 작동을 수행하기 위하여 완전성 및/또는 인증을 가짐을 보증하기 위하여 비-특정 호출 프로그램의 완전성을 체크한다. 하나 또는 그 이상의 디바이스 인증 서버가 마스터 키 및 애플리케이션 키를 유출 및 관리하기 위하여 사용되어진다.

Description

컴퓨터 디바이스 인증을 위한 방법 및 시스템 {SYSTEMS AND METHODS FOR COMPUTER DEVICE AUTHENTICATION}
본 발명은 일반적으로 컴퓨터 시스템과 소프트웨어 방법에 관한 것으로, 더 구체적으로는 컴퓨터 디바이스 인증에 제공하는 시스템 및 방법에 관한 것이다.
개인용 컴퓨터 디바이스는 오늘날 세계에서 점점 더 중요해지고 있으며, 이들 디바이스가 인터넷과 연결됨에 따라 이들 디바이스를 사용하는 트랜잭션(transaction)에 포함되는 엔티티(entity)를 확실히 인증하는 것이 점점 중요해지고 있다.
운영 시스템의 보호 서브-도메인 내의 특권(privileged) 오퍼레이션을 실행하는 중요한 핵심 커널(kernel)은 컴퓨터 보안에서는 매우 오래된 개념이다. 그러나, 현대의 상업적 운영 시스템의 발전과정 동안, 마이크로소프트 윈도우, 유닉스의 다양한 버전에 반영되었듯이 그리고 소형 디바이스의 운영 시스템에 포함되었듯이, 운영 시스템의 전통적인 보안 영역 및 책임은 손상되었거나 바뀌어졌거나 또는 보안 허점으로 가득차게 되었다. 몇몇 경우, 운영 시스템이 너무 커져서 어떤 종합적인 방법으로 분석하거나 확실성을 보장하기가 힘들어지게 되었다. 이론적으로 그러한 보증 프로세스가 가능하더라도 이들 시스템의 예상수명 내에서 실제로 달성하기는 힘들어 보인다.
몇몇 시스템은 더 큰 시스템 내에서 보안-한계 데이터를 포함하고 보안-한계 기능을 수행하기 위해, 개별적인 CPU들을 물리적 또는 구조적으로 결합시켰다. 하나의 예가 인증 디바이스에 기초한 스마트 카드이다. 스마트 카드 디바이스는 하나이상의 내장된 암호화 키로의 유일한 접근을 갖는 분리된 오퍼레이팅 환경을 제공한다. 이것은 내장된 키로 디지털 서명을 하거나 컴퓨터에 의해 개시된 트랜잭션 및 사용자를 인증하기 위해 전통적인 컴퓨터에 부착될 수 있다. 또한 이것은 보안 특성이 상대적으로 종합적인 프로세스에서 분석될만큼 충분히 작고 간단하다. 그러나 스마트 카드 및 다른 부가 디바이스들은 증가된 비용과 환경의 복잡성을 가져왔고, 종종 사용자가 카드 판독기를 설치해야 하고 시스템 운영자를 필요로 하고, 이들 머신의 사용자에게 스마트 카드가 분배될 것이 요구된다. 또다른 예는 키를 위한 지역 비밀 보관함을 갖는, 시스템의 2차적 암호-프로세스의 사용이다. 이것은 항상-삽입된 스마트 카드와 유사한 방식으로 기능한다.
많은 이러한 하드웨어-부가 시스템의 또다른 제약은 부가된 CPU가 그 자체의 사용자 입력 및 출력 디바이스를 가지지 않는다는 것이다. 사용자 I/O 시스템은 이들 디바이스에 더 많은 비용과 복잡성을 증가시켰고, 때때로 기능성과 편리성에서 극히 제한되고 있다. 예를 들어, 내장된 키를 이용하여 무엇을 서명하고 처리하는지에 대해 부착된 컴퓨터에 완전히 의존하는 CPU를 가진 암호화 부가 디바이스는 부착된 컴퓨터에 대한 보안 위협에 공격받기 쉽고, 이것은 디바이스의 몇몇 억제 값을 감소시킨다. 이들 개별 디바이스의 분리때문에, 디바이스가 호스트 머신에 의해 제공되고 있는 트랜잭션이 진짜라고 확신하는 것은 일반적으로 어렵거나 불가능하다. 따라서 이런 점에서, 시스템은 호스트 운영 시스템 및 애플리케이션의 완전성(integrity)에 여전히 중요하게 의존하고 있다.
본발명의 목적은, 디바이스 애플리케이션 소프트웨어의 네트워크 인증을 위해 강력한 암호 식별을 제공하는 것이다. 본발명의 또다른 목적은 시스템에 부가된 하드웨어를 최소화하며 높은 보증을 제공하는 것이다. 본발명의 또다른 목적은 상품성의 상업용 개인 컴퓨터에서 발견되는 것이 아닌 하드웨어를 더 이상 필요로 하지 않는 컴퓨터 디바이스 인증을 가능하게 하는 시스템을 제공하는 것이다.
본발명의 또다른 목적은 보안 커널의 구현에 있어서 트러스트의 확보와 분석 처리를 용이하게 하기 위해, 애플리케이션과 운영 시스템로부터 분리된 도메인에서 작동하는 소형 보안 커널을 제공하는 것이다. 본발명의 또다른 목적은 보안 커널 기능을 요구하는 프로그램의 확실성과 완전성을 확보하기 위해 보안 커널이 운영 시스템(OS)의 메모리와 애플리케이션 프로그램(애플리케이션)에의 접근하도록 하는 것이다.
아래의 상세한 설명과 첨부된 도면을 참조하면 본발명의 다양한 특징과 장점을 더 쉽게 이해할 수 있다. 동일한 참조번호는 동일한 구조 성분을 나타낸다.
도1은 본발명의 원리에 따른 예시적인 컴퓨터 디바이스 인증 시스템의 구성요소를 나타내는 간단화된 블록도,
도2는 클라이언트 구성요소 계층을 나타내는 도면,
도3은 OSD 구성요소 상호작용을 나타내는 도면,
도4는 다중-인자(multi-factor) 클라이언트 인증(MFCA) 등록을 나타내는 블록도,
도5는 본발명의 원리에 따른 제1 예시 방법을 나타내는 흐름도,
도6은 본발명의 원리에 따른 제1 예시 방법을 나타내는 흐름도,
도7은 본발명의 원리에 따른 제2 예시 방법을 나타내는 흐름도,
도8은 본발명의 원리에 따른 제3 예시 방법을 나타내느 흐름도,
도9는 본발명의 원리에 따른 제4 예시 방법을 나타내는 흐름도.
상기 및 다른 목적을 달성하기 위하여, 본원발명은 컴퓨터 디바이스 인증용으로 제공되는 시스템 및 방법을 포함한다. 본원발명은 소형 기밀 보안 커널을 제공하는데, 이는 커널의 구현에 있어서 신뢰를 확보하고 분석하는 과정을 용이하게 하는 동시에, 전술한 부가된 하드웨어 해결책의 제한을 제거하는 과정을 용이하게 한다. 이상적으로, 기밀 보안 커널은 호스트 머신상에서 실행되는 운영 시스템(OS) 및 애플리케이션 프로그램(애플리케이션)으로부터 분리된 도메인에서 작동하지만, OS 및 애플리케이션의 메모리로의 액세스를 가진다. 본원발명은 전통적인 종래의 운영 시스템의 경계내에 소형 내부 보안 커널을 생성함으로써 보안 구조를 제공하여, 완전성을 확인할 수 있으며 OS 및 애플리케이션을 대신하여 안전한작동을 수행할 수 있도록 한다.
본원발명의 키 양상(aspect)은 (1)개시시에 시스템 관리 모드(SMM)으로 이동하는 시크릿 마스터 키를 포함하고 그 후에 디스에이블되는 OAR-락 비휘발성 메모리(NVM), (2)프라이버시/유저 제어능 문제를 해결하기 위하여 디바이스 키를 특정 애플리케이션에 묶는 컨테이너, 및 (3)호출 애플리케이션 "on-the-fly"의 완전성의 스팟(spot) 체킹을 포함한다.
디바이스 키는 유저 인증을 보충하기 위하여, 특정 디바이스에만 배분된 내용을 보호하기 위하여, 및 예컨대 근거리로 기억되고 원거리로 검색된 신용(또는 공유된 신용)을 구비한 가상 스마트 카드를 인에이블되게 하기 위하여 디바이스 인증을 수행하는데 사용된다. 키 컨테이너는 디폴트 CryptoAPI 컨테이너에 대한 대체로서, 시스템-임계 키에 대한 보호를 강화하기 위하여 사용된다.
마스터 암호화 키를 사용하여 마스터 암호화 키로의 액세스를 보호하기 위한 일 실시예 시스템은 비휘발성 기억장치, 시스템 초기화 과정동안 비휘발성 기억장치로부터 마스터 키를 읽고 마스터 키로부터 얻은 기밀값을 숨겨진 기억 위치에 쓰고 시스텀 초기화 과정의 다음 개시시까지 그 시스템에서 실행되는 어떤 프로그램에 의해 비휘발성 기억장치에의 액세스를 디스에이블하는 시스템 초기화 과정, 시스템의 정상 작동 모드에서 실행되는 프로그램에 의해 숨겨진 기억 위치에의 액세스를 방지하는 수단, 및 시스템의 제한된 작동 모드에서 실행되는 프로그램에 의해 숨겨진 기억 위치에의 액세스를 허용하는 수단을 포함한다.
마스터 암호키를 기억장치내에 숨기기 위한 또다른 실시예 시스템은 비휘발성 기억소자로부터 마스터 키를 읽고 다음 시스템 리셋시까지 액세스가 다시 가능하지 않게 되도록 비휘발성 기억소자로의 액세스를 폐쇄하고 마스터 키로부터 얻은 기밀 데이터를 숨겨진 어드레스 공간에 쓰기하는 파워-온 소프트웨어를 포함하고,시스템의 제한된 작동 모드에서 실행되는 프로그램만이 숨겨진 어드레스 공간내의 기밀 데이터로의 액세스를 가진다.
실시 방법은 암호화키의 가용성을 주어진 AppCodeDigest를 구비한 애플리케이션에 제함함으로써 애플리케이션에 대한 데이터로의 읽기 및 쓰기 액세스를 제어하기 위하여 제공된다. 그 실시 방법은 키, 애플리케이션이 액세스하기를 원하는 밀봉 또는 개봉된 데이터 폼을 홀딩하는 AppContainer, AppCodeDigest를 컴퓨팅하기 위하여 호출 애플리케이션을 구성하는 바이트부의 암호 요약을 수행하는 CryptoGate 모듈, 데이터를 밀봉하는 것이 완전성 체크 정보를 추가하도록 변경할 때, 애플리케이션이 주어진 AppContainer내의 데이터를 개봉하도록 허용하는지 여부를 결정하기 위하여 마스터 키, 및 AppContainer와 AppCodeDigest를 조사하는 완전성-체킹을 포함한다.
본원발명은 또한 암호화키의 가용성을 특정 디바이스상의 애플리케이션으로 제한함으로써 애플리케이션에 대한 데이터로의 액세스를 제어하는 방법을 제공한다. 이런 방법은 암호화 프로세싱 모듈에 알려진 키, 애플리케이션이 액세스하기를 원하는 암호화적으로 밀봉된 데이터 형식을 포함하는 애플리케이션 컨테이너 데이터 구조, 애플리케이션-레벨 프로그램과 암호화 프로세싱 모듈사이의 모든 액세스를 인터셉터하고,암호화 서비스 또는 데이터를 액세하기 위하여 시도하는 프로그램의 실행가능한 인-메모리 이미지의 바이트 부를 조사하는 수단을 포함하고, 애플리케이션의 암호화 변환을 켐퓨팅하기 위하여 호출 애플리케이션의 인-메모리 이미지의 바이트부의 암호화 요약을 컴퓨팅하는 암호화 게이트키핑 기능, 및 데이터를 밀봉하는 것이 완전성 체크 정보를 추가하도록 변경할 때 또는 애플리케이션이 주어진 애플리케이션 컨테이너내의 데이터를 개봉하도록 허용하는지 여부를 결정하기 위하여 마스터 키 및 애플리케이션 컨테이너 데이터 구조와 암호 변환을 조사하고 암호화 프로세싱 모듈에 의해 수행되는 완전성-체크 방법을 포함한다.
본원발명은 또한 디바이스 인증을 포함하는 또다른 컴퓨팅 장치의 도움과 함께, 동일한 디바이스상의 동일한 애플리케이션을 인증 서버를 포함하는 또 다른 컴퓨팅 장치에 인증하는 방법을 제공한다. 이 방법은 가입 방법, 등록 방법 및 인증 방법을 포함한다.
가입 방법은 (a)디바이스상의 시스템 관리 인터럽션(SMI)동안 수행되고 디바이스 인증으로 전송되는 결과를 생성하는 제1 암호화 작동 단계 및 (b)디바이스상의 SMI 인터럽트동안 수행되고, 디바이스에 의해 수신되며 디바이스 인증에 의해 발생되는 값을 프로세싱하는 제2 암호화 작동 단계를 포함한다.
등록 방법은 (a)디바이스상의 SMI 인터럽션동안 수행되고 인증 서버에 전송된 결과를 생성하는 제1 암호화 작동 단계, (b)인증 서버에 의해 수행되고 인증방법동안 사용을 위해 기억된 암호화 변수를 생성하는 제2 암호화 작동 단계 및 (c)디바이스상의 SMI 인터럽트동안 수행되고, 디바이스에 의해 수신되며 인증 서버에 의해 발생되는 값을 프로세싱하는 선택적 제3 암호화 작동 단계를 포함한다.
인증 방법은 (a)디바이스상의 SMI 인터럽션동안 수행되고, 인증 서버에 전송된 인증 데이터를 생성하는 제1 암호화 작동 단계 및 (b)디바이스로부터 수신된 인증 데이터상의 인증 서버에 의해 수행되고 인증의 결과를 결정하기 위하여 등록 방법동안 기억된 적어도 암호화 변수를 사용하는 제2 암호화 작동 단계를 포함한다.
본원발명은 또한 동일한 디바이스상의 동일한 애플리케이션을 인증하기 위한 방법 또는 동일한 디바이스의 유저를 PASS 서버를 포함하는 또 다른 컴퓨팅 장치에 일치시키기 위한 제2 팩터를 제공하기 위한 방법을 제공한다. 이 방법은 (a)애플리케이션과 암호적으로 관련된 디바이스상의 애플리케이션 컨테이너 데이터 구조를 생성하기 위하여 디바이스 인증 및 인증 서버로 통신하는 것과 관련되는 가입 방법을 수행하고, (b)인증 서버가 애플리케이션 컨테이너 데이터 구조용 암호화 변수를 기억하며, 신용 정보를 기억하는 애플리케이션을 포함한다. 애플리케이션은 (a)신용 정보를 기억하는 애플리케이션 컨테이너 데이터 구조를 개봉하는 단계, (b)상기 신용 정보를 변경하는 단계, (c)상기 애플리케이션 컨테이너 데이터 구조를 재밀봉하는 단계, (d)동일한 정보 및 적어도 재밀봉된 AppContainer의 일부를 인증 서버에 전송하는 단계를 포함하는 인증 방법을 수행하는 동일한 디바이스상에서 실행되며, 여기서 적어도 상기 재밀봉 작동 부분은 애플리케이션의 코드를 실행하는 동일한 CPU상의 SMI동안 일어난다.
인증 서버는 (a)동일한 정보 및 적어도 애플리케이션 컨테이너 데이터 구조의 일부를 수신하고, (b)컨테이너를 개봉하기 위하여 AppKey 또는 CustAppKey를 룩업 또는 컴퓨팅하기 위하여 동일 정보를 사용하고, (c)개봉된 애플리케이션 컨테이너(AppContainer)가 수용할 수 있는 값을 가지면, 특정 디바이스상의 특정 애플리케이션이 인증된 것으로 간주하고, (d)애플리케이션 컨테이너 데이터 구조와 관련된 키(AppKey 또는 CustAppKey)를 기억한다.
본원발명은 인증, 프라이버시, 완전성, 권한인정, 감사(auditing), 또는 디지털 권리 관리를 위하여 디바이스상의 하나 또는 그 이상의 가상 토큰을 생성하여 이용하는 방법을 제공한다. 이 방법은 각각의 가상 토큰의 종류에 대한 애플리케이션, 특정 종류의 각 가상 토근에 대한 AppContainer, CryptoEngine 구성요소의 암호화 서비스를 요청하는 호출 애플리케이션의 AppCodeDigest를 컴퓨팅하는 CryptoGate를 포함한다.
CryptoGate 구성요소는 하나 또는 그 이상의 수명이 긴(long-lived) 대칭 키를 인지한다. CryptoEngine는 CryptoGate 구성요소를 경유하여 액세스되며, 하나 이상의 수명이 긴 대칭 키 및 하나이상의 수명이 긴 공개키를 인지하고, AppContainer의 암호화 밀봉 및 개봉을 수행한다. 여기서 암화호 작동의 일부는 SMI 인터럽트 동안 수행된다.
CryptoGate 구성요소는 CryptoEngine 및 AppCodeDigest 값으로 로딩된 공개 키를 사용하여, 애플리케이션 코드 또는 정적 데이터의 일부의 디지털 서명을 체킹함으로써 호출 애플리케이션의 완전성을 체크한다.
AppCodeDigest 값은 호출 애플리케이션의 인-메모리 일부 이미지의 최근에 컴퓨팅된 암호화 해시를 포함한다.
CryptoGate 및 CryptoEngine는 (a)마스터 키, AppCodeDigest 및 다른 선택적정보로부터 애플리케이션 컨테이너를 개봉하기 위한 키를 유도하고, (b)AppContainer상의 메시지 인증 코드를 체크하기 위하여 상기 유도된 키를 사용하며, 상기 메시지 인증 코드가 정확하면 에러를 리턴하고, 및(c) AppContainer 데이터를 복호화하기 위하여 상기 유도 키를 사용하며, 그것을 상기 애플리케이션으로 리턴한다.
본원발명은 또한 비밀 키와 디바이스와 관련된 애플리케이션을 안전하게 연관시키는 방법을 제공하며, 상기 디바이스는 디바이스와 관련된 대칭 키에 의해 보증되는 비밀키를 포함하는 AppContainer를 생성하는 것을 포함한다.
본발명을 잘 이해하기 위해 본 명세서에 사용된 다수의 정의를 아래에 제시한다.
디바이스는, 운영 시스템 전에 실행되고 운영 시스템가 동작할 때에도 액세스 가능한 BIOS층 소프트웨어 환경을 포함하는 데스크탑, 랩탑, 핸드헬드, 또는 무선 머신과 같은 컴퓨팅 디바이스이다.
디바이스 기관(device authority)은 디바이스의 보안 특성을 가능하게 하도록 돕는 하나이상의 서버 컴퓨팅 머신을 포함한다.
비밀 마스터 키(SMK)는, 몇몇 실시예에서는 하나이상의 디바이스 기관 머신에 알려지거나 디바이스에 알려진 암호화 변수이다. 이것은 암호화나 완전성 검사를 위한 암호화 키로서, 또는 다른 암호화 변수 또는 키를 계산하는 함수에의 입력으로서 직접 사용될 수 있다.
AppCodeDigest,즉 애플리케이션 코드 다이제스트는, 프로그램 및/또는 정적데이터의 실행가능한 메모리내 이미지의 바이트 일부의 단방향(one-way) 암호 변환을 하는 애플리케이션이다. 이 변환은 SHA1, MD5, RIPERMD160, SAH-256, SAH-512, 또는 CBC-MAC와 같은 함수들에 의해 수행된다.
AppKey(애플리케이션 키)는, 암호화나 완전성 검사를 위한 암호화 키로서 또는 다른 암호화 변수 또는 키를 계산하는 함수에의 입력으로서 직접 사용될 수 있는 암호작성 변수이다. 이 값은 디바이스 및 애플리케이션 쌍에 특유하고, (적어도) 마스터 키 및 AppCodeDigest로부터 유도된다.
CustSecret(고객 비밀)은 디바이스 상에서 동작될 수도 동작되지 않을 수도 있는 애플리케이션 시스템의 몇몇 구성요소에 의해 선택된 암호화 변수이다. 이것은 특정 기업의 인증 서버에 결합되어 있고, 그 기업 도메인의 그 애플리케이션에 대해 인증된 다수의 디바이스들과 결합될 수도 있다.
CustAppKey(고객 애플리케이션 키)는 AppKey 및 CustSecret으로부터 유도된 암호화 변수이고, 암호화나 완전성 검사를 위한 암호화 키로서 또는 다른 암호작성 변수 또는 키를 계산하는 함수에의 입력으로서 직접 사용될 수 있다.
AppContainer, 즉 애플리케이션 컨테이너는 CustAppKey 또는 AppKey를 사용하여 암호적으로 봉인(seal)되거나 봉인해제(unseal)될 수 있는 데이터 구조이고, 여기서 봉인 오퍼레이션은 비밀 및 완전성 검사 및 선택적으로 컨테이너를 봉인하는 애플리케이션의 식별을 위한 인증을 제공한다.
CryptoEngine(암호작성 엔진)은 CryptoGate를 통해 파워-온 셀프-테스트 동안 단지 액세스만 가능한 보호 환경에서 암호화 오퍼레이션을 수행하고, 높은 완전성의 공개키(public key)를 기억하거나 회수할 수 있고, 적어도 하나의 수명이 긴(long-lived) 대칭키(SMK)를 기억할 수 있고, 이 수명이 긴 대칭키(들)로부터 대칭키를 유도할 수 있고, 대칭 암호화(완전성 및 비밀 프리미티브(primitive)) 및 공개키 암호화를 수행할 수 있고, 의사랜덤 넘버 발생할 수 있고, 선택적으로 비밀키 암호화를 할 수 있고, 선택적으로 키 발생 및 키 유입과 유출과 같은 다른 암호화 지원 기능을 할 수 있다.
CryptoGate(암호화 게이트키퍼)는 애플리케이션층 프로그램과 CryptoEngine 사이의 모든 액세스를 차단하고, 암호화 서비스 또는 데이터에 액세스하려고 시도하는 프로그램에 대한 정적 데이터 및/또는 이 프로그램의 실행가능한 메모리내 이미지의 바이트 일부를 조사할 수 있다.
AuthBuffer(인증 버퍼)는 CryptoGate 및/또는 CryptoEngine에 의해 제공된 오퍼레이션 세트를 특정 애플리케이션이 수행하도록 하는 데이터 구조이고, 이 데이터 구조는 코드 다이제스트에 포함된 부분을 작성하는 정적 데이터 및 애플리케이션 코드의 일부의 기술(description) 및 AppCodeDigest)를 포함하고, CryptoEngine에 의해 검증될 수 있는 전자서명을 포함한다.
MAC(메시지 인증 코드)는, 널리 알려지지 않은 암호화 변수를 필요로하는 방법에 의해 메시지의 바이트 일부에 대해 계산되는 데이터 구조 및 메시지의 완전성을 검사하는데 사용되는 값이다. 이에 대한 널리 알려진 알고리즘은 CBC-MAC, DMAC, 및 (MD5 및 SHAI와 같이 공지된 해쉬 함수에 기초한) HMAC를 포함한다.
SMI(시스템 관리 인터럽트)는, SMI 모드 외에서는 쉽게 사용할 수 없는 지속적인 메모리 어드레스 공간 및 CPU에 대한 독점적 액세스를 BIOS 레벨의 소프트웨어가 얻을 수 있도록 하는 대부분의 CPU에 의해 지원되는 인터럽트 특성이다.
본발명의 고 레벨 설계가 먼저 설명된다. 일반적으로, 컴퓨터 디바이스 인증 시스템(10)의 구조는 하나이상의 디바이스 인증기관, 클라이언트 암호화 엔진(CryptoEngine), 이상적인 사용 BIOS, 잠금된(locked) 비휘발성 메모리 및 시스템 관리 모드(SMM), 운영제체 드라이버(OSD), 인에이블된 클라이언트 애플리케이션(Apps), 인증 서버(PASS), 및 인에이블된 서버 애플리케이션을 포함한다.
온라인 가입(enrollment) 프로세스가 클라이언트 디바이스와 가입 서버 사이에 제공된다. 트랜잭션 레벨 애플리케이션 프로그램 인터페이스(APIs)는 클라이언트 서버 애플리케이션에게 확장된 디바이스 인증 기능을 제공한다. 시스템은 온-라인 클라이언트/서버 애플리케이션을 위한 보안 기능 및 오프-라인 독립형(standalone) 기능을 지원한다.
인증 서버는 임의의 암호적으로-인에이블된 서버 애플리케이션의 구성요소이다. 이것의 주요 목적은 디바이스-인에이블된 애플리케이션을 보증하는 것에 관련된 암호화 기능을 수행하는 것이다. 이들 기능을 수행하기 위해, 필요하다면 하나 이상의 디바이스 인증기관 서버의 도움을 사용하여, 인증 서버는 암호적으로-인에이블된 클라이언트와 교환되는 컨테이너를 봉인하거나 봉인해제한다. 인증 서버는 Key ID(KID) 값의 테이블을 유지하고 있다.
디바이스 인증기관 서버는 주로 디바이스 식별자(identifier) 및 키의 등록을 다룬다. 몇몇 실시예에서 디바이스의 시크릿 마스터 키는 디바이스 및 하나이상의 디바이스 인증기관 사이에 공유되는 시크릿이다. 이 경우, 디바이스 인증기관은 인증 서버 lc 다른 애플리케이션 서버를 위해 시크릿 마스터 키로의 액세스가 필요한 모든 암호화 오퍼레이션을 수행해야 한다.
본발명은 AppContainer에 대한 지원을 제공한다. 디바이스 인증기관은 AppKeyPart를 인증 서버에 전달한다. 서버는 AppContainer의 생성을 가능케하는 알고리즘을 구현한다. 이 알고리즘은 시크릿 마스터 키(SMK) 및 AppCodeDigest(ACD)로의 액세스를 요구하고, 시크릿 마스터 키가 기억되는 머신에 불러내어진다. 디바이스 인증기관은 클라이언트 PC 상에서 애플리케이션을 어떻게 얻을 것인지와 운영 시스템 드라이버와 함께 레지스터를 어떻게 가질 것인지를 정의한다. 이것은 제1 AppContainer가 디바이스 인증기관 서버에 의해 생성되기만 한다면 임의의 서버로부터 온라인으로 행해진다.
유틸리티는 애플리케이션을 위한 AppCodeDigest를 생성한다. 이들 유틸리티는 애플리케이션이 실행될 것으로 기대된다면 동일한 운영 시스템 상에서 실행된다. 애플리케이션을 위한 AppCodeDigest는 애플리케이션에 대해 새로운 테이블의 데이터베이스에 기억된다. AppCodeDigest는 AppContainer를 생성하기 위해 액세스가능하다. 공개키/비밀키 쌍은 서버를 위해 발생된다. 키 쌍은 키 발생 소프트웨어가 이해하는 표준을 사용하여 유입되고 유출된다. 또한 데이터는 서명용 키(signing key) 쌍을 사용하여 서명된다.
또한, 본발명에 사용된 클라이언트 암호화 엔진(CryptoEngine)의 몇몇 실시예가 있는데, 표준 개인용 컴퓨터에서 사용가능한 다양한 하드웨어 특성을 이용한다.
도1은 본발명의 원리에 따른 컴퓨터 디바이스 인증 시스템(10)의 실시예의 구성요소를 나타내는 간단화된 블록도이다. 본발명의 바람직한 실시예는 리셋-개방 래치-보호 메커니즘(OAR-lock)(14)에 의해 보호되는 비휘발성 메모리(NVM)(11), BIOS ROM 시스템 초기화 모듈(12), 및 시스템 관리 모드(SMM)(16)로 구성되며, 시스템 관리 인터럽트(SMI)를 통해 시스템의 오퍼레이션의 정규 모드로부터 액세스된다.
보호되는 비휘발성 메모리(11)는 시크릿 마스터 키를 기억하는데 사용된다. BIOS 시스템 초기화 모듈(12)은 시크릿 마스터 키를 비휘발성 메모리(11)로부터 시스템 관리 모드(16)에서만 액세스가능한 보호되는 메모리 영역인 SMRAM(13)로 확실히 전달하는데 책임을 진다. 시크릿 마스터 키가 SMRAM(13)으로 전달된 후, 비휘발성 메모리(11)가 다음 시스템 리셋때까지 시스템에서 실행중인 프로그램(15)으로 액세스하지 못하도록 하기 위해 시스템 초기화 모듈(12)은 래치(14)를 폐쇄한다. 시크릿 마스터 키는 시스템의 정규 모드 동안에는 단지 숨겨진 SMRAM(16)에서만 사용가능하다.
OAR-락(lock) 보호 메커니즘(14)은, 개시 시각에 실행하는 ROM 시스템 초기화 모듈(12)이 아닌 다른 임의의 프로그램(14)에 의해 비휘발성 메모리(11)가 읽혀지는 것을 막는다. 비휘발성 메모리(11)를 읽은 다음, 시스템 초기화 모듈(12)은, 시스템 초기화 모듈(12)이 제어를 재획득하는 시각인 그다음 시스템 리셋때까지 비휘발성 메모리(11)가 완전히 액세스되지 않도록 하기 위해, 래치(14)를 폐쇄한다.
사용가능하지 않을 때의 OAR-락 비휘발성 메모리(11)를 이용하는 대안은, BIOS 시스템 초기화 모듈(12)에서의 시스템 개시때 파워-온/셀프-테스트 오퍼레이션 이후에 시스템에 의해 어드레스되지 않도록 매핑되는 ROM의 전형적인 16K 바이트 영역인 BIOS ROM 부트(boot) 블록에서 시크릿 마스터 키의 공유를 기억하는 것이다. 또한 변하는 레벨의 보증으로 시스템 개시 이후 애플리케이션에 일반적으로 액세스가능하지 않게 되는 또다른 영역도 있다.
SMI 모드는 부가적인 독특한 특징을 갖는 인텔의 x86-호환성 프로세서의 특별 모드이다. 소프트웨어 디버거(debugger)는 SMI 모드를 통해 진행될 수 없고, SMI 메모리는 언제 SMI 모드에 있는지를 제외하고는 보여질 수 없다. 이 모드는 머신의 정규 오퍼레이션 동안에 클라이언트 PC상에서 시크릿 마스터 키를 숨기는데 사용되고, 머신의 인증 식별에 설정(bind)될 필요가 있는 다양한 보안 목적을 위한 시크릿 마스터 키를 사용한다.
이전에 언급한 특별한 특징(BIOS ROM 코드, OAR-락 비휘발성 메모리(11), 및 시스템 관리 모드(16)의 어느것도 시스템의 동작을 위해 절대적으로 필요한 것은 아니지만, 이들은 시스템(10)에 가장 높은 수준의 보안 오퍼레이션의 보증을 제공한다.
소프트웨어-온리(software-only)의 선택적인 실시예에서, 동일한 기능이 더 낮은 수준의 보증으로 제공된다. 이 경우 오퍼레이션의 제한된 모드는 표준 "링 제로(ring zero)" 운영 시스템 보호이고, CryptoEngine 기능은 운영 시스템 드라이버로 불리는 시스템 디바이스 드라이버의 내측에 구현된다. 운영 시스템 드라이버가SMI 모드에서 실행되지 않기 때문에, BIOS-확장 제품만큼 확실하지는 않다. 따라서 시크릿 마스터 키가 발견되어 카피되는 것을 방지하기 위해 특별한 부가적 변경 및 기술이 또한 제품의 소프트웨어-온리 형태에 포함된다. 부가적으로, 시크릿 마스터 키가 마더보드가 아닌 파일 시스템에 기억될 것이기 때문에, 시크릿 마스터 키를 개인용 컴퓨터에 설정하기 위해 부가적 디바이스 감지가 운영 시스템 드라이버에 부가되어야 한다.
더우기, 소프트웨어-온리 시스템이 SMI 모드에서 실행되지 않는 경우의 실시예에서, 코드는 역설계(reverse-engineer) 및 "해크(hack)"를 더 어렵게 하는 특별한 특징을 포함한다.
cryptoEngines의 다양한 소프트웨어 형태에는, 시크릿 마스터 키에 대한 가능한 가장 강력한 보호 및 코어 암호화 오퍼레이션을 제공하기 위해 다양한 기술이 사용된다.
본발명은 시크릿 마스터 키 및 디바이스 설정(binding)을 제공한다. 시크릿 마스터 키와 머신 사이는 연결되어 있으며 시크릿 마스터 키는 하나의 머신에서 다른 머신으로 전달될 수 없다. 이 연결은 머신 메트릭스에 근거하고 있고, 사용자가 시크릿 마스터 키를 사용하는 능력을 잃지 않으면서 사용자가 그들의 머신을 천천히 업그레이드하도록 한다. 마스터 키가 시스템내의 특정 디스크 드라이버에 설정되었을 때, 하드 드라이버를 리포맷팅하거나 또는 그것을 다른 시스템으로 교환하는 것은 시크릿 마스터 키의 사용을 불가능하게 할 것이다.
본발명은 제한된 시크릿 마스터 키 및 세션 키의 노출을 제공한다. 시크릿마스터 키 및 세션키는 임의의 오퍼레이션을 위해 이들을 사용할 때는 노출이 제한되도록 설계된다.
본발명은 해크 저지를 제공한다. 시크릿 마스터 키를 SMI 메모리 내에서 숨기고 또한 BIOS가 할 수 있듯이 SMI 모드에서 코드 오퍼레이션의 보기(viewing)를 불가능하게 하는 능력을 소프트웨어 CryptoEngine가 가질 수 있다는 사실때문에, 소프트웨어 CryptEngine 코드는 해킹을 저지하기 위해 부가적인 방법을 채용한다. 또한, 소프트웨어 CryptoEngine은 일반 프로그램이 시크릿 마스터 키를 결정하지 못하도록 하는, 시크릿 마스터 키의 기억을 위한 기술을 채용한다.
디바이스 인증기관의 개요가 이제 설명된다. 디바이스 인증기관 구성요소는 다음의 기능을 수행한다. 디바이스 인증기관은 디바이스를 가입하고, 애플리케이션 및 디바이스 쌍에 특정된 AppKey를 제공함으로써 디바이스 상에 그것의 SMKm 레지스터 애플리케이션을 기억한다. 디바이스 인증기관 및 동반된 모듈은 여기서는 간단히 설명되고 조금뒤에 상세히 설명될 것이다.
클라이언트 애플리케이션은 암호적으로-인에이블된 애플리케이션이고, 전형적으로 마이크로소프트 윈도우 기반의 개인용 컴퓨터(PC) 상에서 실행된다. 클라이언트 애플리케이션은, 사용자가 디바이스가 가입되었는지를 테스트하고, 디바이스를 가입하고 Key ID를 디스플레이하고, 디바이스상에 애플리케이션을 등록하고, Creat, Edit, Delete, post AppContainer를 포함하는 AppContainer를 인증 서버에서 조작하고, AppContainer를 인증 서버로부터 얻고, 및 디바이스를 가입해제(unenroll)하도록 한다.
인증 서버는 클라이언트/서버 암호화-인에이블된 애플리케이션의 서버 부분의 구성요소이다. 이것은 클라이언트로부터의 일을 인증하는데 책임이 있다. 인증 서버는, 클라이언트 디바이스로부터의 등록요구를 수신하고, 애플리케이션 등록 모듈로부터 AppKey를 요구하고 그것을 기억하고, AppContainer를 생성하여 클라이언트 서버로 보내고, 사용자 인터페이스(UI)를 통해 UI가 AppContainer(Creat, Edit, Seal, 및 Unseal)를 조작하도록 제공하고, 및 클라이언트 디바이스로부터 AppContainer를 수신한다.
디바이스 인증기관은 몇가지 구성요소로 이루어지고 적어도 다음의 기능들을 가진다. 가입 모듈은 디바이스를 가입하는 요구를 수신한다. 이것은 시크릿 마스터 키의 절반을 클라이언트에게 전달하고 다른 절반을 생성하여 그것을 클라이언트 디바이스에게 반환한다.
전형적인 사용자 경험이 설명된다. 오퍼레이션은 디바이스 인증기관을 구성하는 시스템을 테스트할 때 사용자가 수행할 것으로 기대할 수 있는 것이다. 기본 개념은, (디바이스 인증기관의 가입 모듈을 사용하며) 사용자가 클라이언트 디바이스를 가입하고, (디바이스 인증기관의 애플리케이션 등록 모듈을 사용하여) 디바이스 상에서 애플리케이션을 등록하고 그후 AppContainer를 생성, 편집, 봉인, 및 봉인해제한다. 또한 사용자는 AppContainer를 인증 서버로 보내는데, 인증서버에서는 애플리케이션 등록 모듈에 의해 발생된 AppKey를 사용하여 AppContainer가 조작될 수 있다. 인증 서버 기능은 디바이스 인증기관에 의해 인에이블된다.
전형적인 셋업은 다음과 같다:
클라이언트 PC <--> 애플리케이션 등록 및 AppContainer 전달 <--> PASS 서버 클라이언트 PC <--> 가입 <--> 디바이스 인증기관 서버.
시스템을 사용하기 위해 사용자에 의해 수행되는 행동은 아래에 제시된다.
클라이언트 상에서 디바이스 가입은 다음과 같다. 디바이스를 가입하기 위해 사용자는 클라이언트 애플리케이션을 사용하여 다음의 행동을 수행한다.
사용자는 가입을 위한 테스트를 한다. 이것은 디바이스가 이전에는 가입 옵션을 위한 테스트를 사용하여 가입되지 않았다는 것을 보장하기 위해서이다. 만약 디바이스가 가입되었었고 상요자가 재-가입하기 원한다면, 애플리케이션에서의 가입해제(un-enroll) 옵션이 선택된다.
상요자는 가입 디바이스 옵션을 선택한다. 이 옵션은 가입 서버와 접촉하고 디바이스를 위한 시크릿 마스터 키를 발생한다. 시크릿 마스터 키는 클라이언트 PC에게 반환되어 기억될 것이다(어디에 기억되는가는 암호화 시스템의 어떤 버전이 사용되고 있는가에 의존한다). 디바이스가 가입되었다는 것을 지시하는 다이얼로그가 나타난다.
사용자는 새로운 시크릿 마스터 키가 생성되었던 디바이스 인증기관 로그를 검증한다. 사용자는 새로운 시크릿 마스터 키가 생성되었다는 것을 나타내기 위해 디바이스 인증기관에서 가입 사용자 인터페이스를 사용하여 검사할 수 있다.
클라이언트에서의 애플리케이션 등록은 다음과 같다. 다음의 행동을 수행하기 위해서는 사용자가 가입된 클라이언트 디바이스를 가지고 있어야만 한다.
사용자는 등록을 초기화한다. 사용자는 등록을 초기화하기 위해 등록 옵션을선택한다. 이 때 사용자는 애플리케이션과 디바이스 결합을 위한 식별자(ADID)를 위해 대기하게 된다.
등록 요구가 인증 서버를 통해 애플리케이션 등록 모듈로 전송된다. 애플리케이션 등록 모듈은, 나중에 인증 서버로 반환되는 AppKey생성한다.
사용자는 애플리케이션 등록 모듈 로그를 검사할 수 있다. 사용자는 애플리케이션 등록 모듈 사용자 인터페이스를 사용하여 AppKey가 애플리케이션을 위해 발생되었는지를 검사한다.
사용자는 등록을 위한 인증 서버 로그를 검사할 수 있다. 사용자는 애플리케이션이 디바이스 상에서 실행되는 경우를 위해 인증 서버가 이제 AppKey를 가졌는지를 검사한다.
사용자는 클라이언트 디바이스에 대해 AppContainer를 이제 가지고 있는지를 검증한다. 클라이언트 디바이스상의 AppContainer 메뉴를 통해 사용자는 그가 AppContainer를 가지고 있다는 눈에 보이는 확증을 본다.
AppContainer는 다음과 같이 클라이언트 상에서 동작한다. 다음은 사용자가 AppContainer를 가지고 클라이언트 디바이스 상에서 무엇을 할 수 있는가에 대한 설명이다. 등록 후 사용자는 인증 서버에 의해 생성된 디바이스 상에서 한개의 AppContainer를 가질 것이다.
클라이언트 상에서 제공된 옵션은, 사용자가 AppContainer를 서버로 보내게 하고 아래에 설명되는 인증 서버로부터의 AppContainer를 요구하도록 한다. 이 옵션의 의도는 클라이언트와 인증 서버 사이의 전형적인 트랜잭션을 나타내기 위한방법을 제공하는 것이다. 설명의 가장 좋은 방법은 예시를 통한 것이다.
사용자는 그의 클라이언트 PC 상의 그의 가상 현금 서랍에 돈을 넣기를 원한다. 현재의 잔금이 AppContainer에 기억된다. 사용자는 현금 서랍 애플리케이션에서 부가 현금(Add Cash) 옵션을 선택하고, AppContainer는 (현금 서랍 제공자에 의해 실행되는) 인증 서버상에서 실행되는 AddCash 스크립트로 전송된다. AppContainer는 개방되고, 데이터가 바뀌고 그 다음 사용자에게 반환되고, 이 모든 것이 동일한 트랜잭션에 있다.
시스템의 일 실시예에서, 디바이스 인증기관 고객은, 그 자신의 속도로 그의 데이터를 부가하고 로그를 체크아웃하면서, 클라이언트 및 인증 서버에서 무엇이 일어난지를 보고 그 자신의 AppContainer를 조작할 수 있는 능력을 가진다. 따라서 AppContainer가 서버로 전송되고 미리 정의된 데이터가 변화하고 그후 클라이언트로 반환되는 하나의 작은 트랜잭션 대신에, 이 작업이 클라이언트 디바이스로부터 사용자에 의해 개시되도록 하는 기능이 제공된다. 사용자는 AppContainer를 서버로 전송하기 위해 클라이언트 상에서 옵션을 선택할 수 있다. 그후 사용자는 서버로 가서 그것이 있는지 검사하고, 그안에 있는 약간의 데이터를 변경하고 그것을 재봉인한다. 그후 사용자는 클라이언트 PC로 다시 돌아와서 AppContainer를 다시 얻을 수 있다.
본 발명의 바람직한 실시예에서, 클라이언트는 서보가 컨테이너를 푸시 백하게 하기 보다는 데이터를 풀링한다.
유저가 List AppContainer, Edit an AppContainer, 인증 서버로의 Send anAppContainer, 인중 서보로부터의 Get an AppContainer, Create an AppContainer, 그리고 Delete an AppContainer할 수 있게 하는 클라이언트 애플리케이션상의 AppContainer 메뉴가 존재한다.
List AppContainer. 모든 AppContainer는 애플리케이션에 의해 클라이언트 다바이스상의 데폴트 디렉토리내에 기억된다. List AppContainer 옵션을 선택하는 것은 (특정 데이터를 생성시킨 애플리케이션을 식별하는 특정 데어터에 가능한)모든 컨테이터가 디스플레이될 수 있게 한다. 유저는 리스트내의 AppContainer를 하이라이팅할 수 있고, 그후에 다음 2개의 옵션중 하나를 선택할 수 있다.
Edit AppContainer. 상기 애플리케이션은 AppContainer가 현재 밀봉되어 있고 유저에게 AppContainer를 개봉할 옵션을 준다는 것을 경고한다. 개봉이 성공적이면 AppContainer내의 콘텐츠는 텍스트 박스내에 디스플레이되고 편집가능해진다. 유저가 임의의 AppContainer를 바꾼 후에 그 AppContainer를 닫으면, 그에게 Seal the AppContainer의 옵션이 주어진다.
인증 서버로의 Send AppContainer. 유저는 상기 인증 서버에 AppContainer를 송신한다. 이것은 유저가 인증 서버로 갈 수 있게 하고 AppContainer를 조작시도를 가능하게 한다.
인증 서버로부터의 Get AppContainer. 유저는 인증 서보로부터 특정 파일을 요청할 수 있다.
Create AppContainer. 유저는 그 자신의 AppContainer를 생성할 수 있어야 한다. 유저가 상술된 Edit AppContainer와 유사한 이러한 옵션 능력을 선택할 때유용하다.
Delete AppContainer. 이것은 암호화 기능은 아니지만 시스템을 타이딩 업하는 것을 돕는데 유용하다.
인증 서버상의 AppContainer 작동을 이제 설명할 것이다. 이 인증서버는 유저가 다양항 태스크를 실행할 수 있게 하는 2개의 유저 인터페이스(AppKeys log 및 AppContainer)를 나타낸다.
AppKeys log는 AppKey가 요청될 때 어떤 것이 실제로 일어나고 있고 있다는 유저에게 나타내기 위해 사용된다. 이것은 유저가 정보에 대하여 어떤 것도 하는 것을 허용하지 않을 것이다. 이것은 AppKey가 식별자를 가진 클라이언트 디바이스로부터 수신되었고 AppKey가 기억되었다는 것을 도시하는 로그 뷰어일 수 있다. 이것은 날짜/시간, 클라이언트 디바이스의 IP 어드레스, 즉, KID, 결과의 APPKey등과 정보를 나타낼 수 있다.
AppContainer 유저 인터페이스는 클라이언트 디바이스 애플리케이션의 것과 유사한 옵션을 제공한다. 이 유저는 List AppContainer, Create an AppContainer, 및 Delete an AppContainer할 수 있다.
List AppContainer는 모든 AppContainer가 속해있는 애플리케이션의 식별자와 함께 인증 서버상에 기억된 모든 AppContainer를 나열한다. AppContainer의 선택은 AppContainer의 콘텐츠를 편집할 수 있는 또 다른 페이지를 불러온다.
Create AppContainer를 사용하여, 유저는 디바이스가 요청할 수 있는 클라이언트 디바이스에 대한 AppContainer를 생성한다. Delete AppContainer 기능은 암호화 기능이 아니지만 시스템을 타이딩 업하는 것을 돕는데 유용하다.
가입 및 애플리케이션 모듈은 요청된 마스터 키, AppKeys등에 정보를 제공하는 유저 인터페이스-로그 뷰어를 갖는다.
암호화 서버 설계를 이제 설명할 것이다. 이 서버는 그 기능 스플리트 업이 다양한 구성요소를 용이하게 보호하게 한다. 주요 착상은 키가 네트워크 어디에 절대 가지 않는다는 것이다.
이 구성요소는 키, 암호화 라이브러리, 및 가입 코드를 포함한다. 이 키(시크릿 키, 서버 비밀 키)는 암호화 기능 및 데이터베이스를 조합하는 보안 박스내에 기억되는 것이 바람직하다. 이 암호화 라이브러리는 다양한 컨테이너상에 생 동작(인코딩, 디코딩등)을 실행하기 위해 필요한 루틴과 더불어 인증 서버를 제공한다. 가입 기능은 시스템내에 가장 기밀한 데이터 사이에 있는 시크릿 마스터 키를 생성한다. 이 가입 코드는 이 시크릿 마스터 키를 보호하고 그들을 보안을 유지한 상태에서 인롤링 클라이언트 디바이스에 전송한다.
암호화 서버의 논리 레이아웃은 다음과 같다:
방화벽 및 로드 밸런서 뒤에는 HTTP 서버--Enrollment.protocolhandler(+컨테이너 클라스)이 있다. 비인증된 트래픽이 상기 키 서버에 의해 수신되는 것을 방지하는 또 다른 논리 방화벽뒤에는 Enrollment.getSmk를 실행하는 Key DB를 갖는 키 서버(+컨테이너 클라스) 및 RSA-Bsafe Crypto Lib가 있다.
이 암호화 서버는 코드 승인, 통신, 및 루트 키에 대한 3개의 비밀 키를 안전하게 기억한다. 이 루트 키는 새로운 하위 레벨의 키를 승인하기 위해 사용된다.이러한 키는 암호화 모듈이 스타트업을 로딩 온하는 암호화된 파일내에 기억될 수 있다.
각각의 클라이언트의 가입과 함께 생성된 스크릿 마스터 키는 데이터베이스내에 기억된다. 디바이스 인증은 시크릿 마스터 키를 생성한다. 이러한 코드는 가입의 serlet/protcol 핸들링부로부터 공개 키(mkc(clientSeed))를 수신한다.
이 디바이스 인증의 기본적으로 요청되는 기능은 가입 요청을 처리하는 것이다. Enrollment.protocolhandler 기능은 컨테이너를 네트워크로부터 꺼내어 그 컨테이너를 암호화 서버로 보내고, 그래서 enrollment.genSmk 코드는 임의의 다른 파티에 임의의 키 정보를 노출하지 않고 그 역할을 수행할 수 있다.
이제 구성요소에 대해 상세하게 설명할 것이다.
가입. 가입에 대한 프로세스 플로우는 다음과 같다.
(1) 가입 서블렛은 클라이언트에 의해 호출된다.
(2) 가입 서블렛은 RMI를 통해 보안 서버상의 가입 클라스에 대해 설명한다. 입력 흐름은 보안 서버상의 Enrollment Object로의 인수로서 전송된다.
(3) 그 다음, 보안 서버상의 Enrollment Object는 구성자 인수로서 수신된 입력 흐름으로 Construct a PubKContainer하고,
상기 PubKContainer로부터 Get an Instance of MK Container하고,
MK Container로부터 Extract the SMK Client하고,
Generate a random SMK server seed(즉, SMK의 서버 부분)하고,
마스터 키를 발생시키도록 Concatenate SMClientSeed with SMKServerSeed(이연결은 그 오더에서 SMKClientSeed + SMKServerSeed이다)하고,
MK Container Object내에 적당한 작동 코드 및 데이터(SMKServerSide)를 설정하고,
이전 단계에서 형성된 마스터 키 상에 SHA1을 실행함으로써 Kry ID를 발생시키고,
마스터 키 및 Key ID를 BIgIntegers로 변환시키고 그 BIgIntegers를 데이터베이스내에 기억하고,
취득된 MKContainer object를 밀봉하고,
생 데이터를 바이트의 배열의 형태로 보안 서버로부터 웹 브라우저로(즉, 호출 가입 서블렛으로) 전송되게 하도록 진행한다.
가입 서블렛은 생 데이터를 입력 흐름으로 변환시키고 그 입력 흐름을 HTTP 응답으로서 클라이언트에 전송한다.
상기 플로우는 단순한 실시예에 대한 것이다. 바람직한 실시예에서, 인식 서블렛은 클라이언트가 SMKServer seed를 성공적으로 수신하였다는 클라이언트 응답을 기다리고 그후에 영구 시크릿 마스터 키에 대한 데이터베이스 테이블을 업데이트한다.
이제 모듈 구성요소를 상세하게 설명할 것이다.
클라이언트 애플리케이션은 보통 마이크로소프트 윈도우에 기초한 PC에서 실행하는 애플리케이션이다. 이러한 애플리케이션이 암호화 기능을 사용하기 위해 이 애플리케이션은 운영 시스템 드라이버에 의해 호출되는 커넬 모드 디바이스 드라이버로 인터페이스한다.
이 애플리케이션은 Initialize, Test for Enrollment, Enroll the device, 디바이스상의 애플리케이션 Register, List AppContainers, Edit AppContainer, Save AppContainer, 인증 서버로 Post AppContainer, 인증 서버로부터 Get AppContainer, Create a new AppContainer, 및 디바이스 Un-enroll의 기능을 제공한다.
초기화에 있어서, 애플리케이션이 호출될 때 이 애플리케이션은 자동적으로 운영 시스템 드라이버를 로딩하고, 애플리케이션이 등록된 애플리케이션으로 설정되도록 OsdRegisterApplication을 호출한다.
가입에 대한 테스트에서, OsdGetCapabilities의 호출은 디바이스가 이미 가입되었는지를 보기 위해 복귀되는 능력 파라미터를 체크하고, 디바이스가 가입되었는지를 나타내는 다이얼로그를 디스플레이한다.
밀봉된 PubKContainer를 얻기 위해 OsdEnrollGeneralRequest를 디바이스에 가입하고 HTTP 요청을 디바이스 인증 가입 URL에 전송하는 것은 요청의 바디내에 PubKContainer를 통과시키고, 응답 코드를 체크하여 작동이 성공적이었다는 것을 보장한다. OsdEnrollProcessResponse로의 호출에서 MKContainer 파라미터로서 돌아온 콘텐트를 성공적으로 전송하였다면, 가입이 성공적이었는지를 나타내는 다이얼로그를 디스플레이한다.
디바이스 호출 OsdGetCapabilities상의 애플리케이션을 등록시키기 위해 디바이스가 이미 가입되었는지를 보기 위해 복귀된 커퍼빌리티 파라미터를 체크한다.디바이스가 이미 가입되지 않았다면, 상술된 바와 같이 디바이스를 가입한다. 애플리케이션/디바이스 조합을 식별하는 스트링(ADID)에 대해 유저를 프롬프트한다. Create a PubKContainer는 등록을 위해 사용될 것이다. 디바이스 인중 RegisterApp URL로 HTTP 요청을 전송하고 요청의 바디에 PubKContainer 및 ADID를 패스시킨다. 작동이 성공적이었다는 것을 보장하기 위해 응답 코드를 체크한다. 작동이 성공적이었다면 그 결과의 데이터는 AppContainer이어야 한다. 그리고 데폴트 디렉토리에 AppContainer를 기억한다.
유저는 AppContainer를 하이라이팅하는 능력으로 상기 데폴트 디렉토리에 기억된 AppContainer의 리스트를 디스플레이할 수 있다.
클라이언트 애플리케이션은 (메뉴 옵션, 버튼등을 통해) 하이라이팅된 AppContainer를 편집하고, 하이라이팅된 AppContainer를 삭제하고, 하이라이팅된 AppContainer를 인증 서버로 전송하고, 그리고 새로운 AppContainer를 생성하는 능력을 제공한다.
AppContainer를 편집하기 위해 OsdAppContainerUnseal 기능을 호출하고 AppContainer 파일의 콘텐츠를 pContainerBuffer 파라미터로 전송함으로써 먼저 Unseal the AppContainer하고, OsdAppContainerUnseal이 성공적이 아니라면 에러 다이얼로그를 디스플레이한다. Data field로 가기 위해 Parse the AppContainer structure한다. 유저가 데이터를 바꿀 수 있도록 하는 편집 박스에 AppContainer의 콘텐츠를 디스플레이한다. AppContainer에 이 변화를 기억하거나 버리는 능력을 제공한다.
AppContainer를 기억하기 위해, AppContainer를 밀봉하고, AppContainer 구조를 재구성하고, OadAppContainerSeal 기능을 호출하여 pContainerBuffer 파라미터에 밀봉되지 않은 AppContainer 구조의 콘텐츠를 전송하고, OsdAppContainerSeal 이 성공적이 않다면 에러 다이얼로그를 디스플레이한다. 밀봉된 AppContainer 구조를 파일에 기억한다.
AppContainer를 인증 서버에 놓기 위해, 요청의 바디에 하이라이팅된 AppContainer 파일의 콘텐츠를 전송하는 HeresAnAppContainerForYa 기능에 대한 URL에 HTTP 요청을 전송하고, HTTP 요청의 상태를 체크하고 성공 또는 실패에 대한 다이얼로그를 디스플레이한다.
인증 서버로부터 AppContainer를 얻기 위해 유저가 다운로드될 서버상의 파일을 선택할 수 있도록 하는 다이얼로그 박스가 제공된다. HTTP 요청은 이 요청의 바디에 요청된 AppContainer 파일의 콘텐츠를 전송하는 OiGiveMeAnAppContainer 기능에 대한 URL로 전송된다. HTTP의 요청의 상태가 체크되고 성공 또는 실패에 대한 다이얼로그를 디스플레이한다. 파일이 덮어쓰여질 것이라면 유저가 오리지널을 덮어쓰도록 프롬프팅한다.
새로운 AppContainer를 생성하고, 현존하는 AppContainer파일을 열고, AppContainer를 개봉하고, 데이터 블록을 제로로 하기 위해서, 유저가 데이터를 편집하는 것을 가능하게 하고, Save AppContainer함수(유저에 의해 지정된 새로운 파일명으로 기억된)를 따르게 한다.
디바이스를 판독하기 위해, 등록된 애플리케이션으로서 애플리케이션을 설정하는 OsdRegisterApplication를 호출한다. 디바이스가 이미 가입되었는지를 확인하기 위해 복귀된 Capabilities Word를 체크하는 OsdRegisterApplication를 호출한다. 디바이스가 이미 가입되었다면 OsdInvalidateSMK를 호출한다.
인증 서버(PASS)에 의해 제공되는 기능성은 하기와 같다. 인증 서버는 디바이스/애플리케이션 조합을 등록할 수 있다. 클라이언트 디바이스는 OiRegisterME함수의 URL에 리퀘스트를 전송하고, 리퀘스트의 본체내에는 PubKContainer 및 ADID가 포함된다. 인증서버는 이후에 새롭게 생성된 AppKey를 사용해서 AppContainer를 생성하고, 이를 클라이언트 디바이스로 리턴한다. 이로써 등록이 완료된다. 상기 모든 과정은 클라이언트, 인증서버 및 애플리케이션 등록 모듈사이에서 단일 트랜잭션으로 행해진다.
등록서버는 AppContainer(생성, 편집, 밀봉, 개봉)를 조작하도록 유저 인터페이스를 제공한다. 인증 서버는 유저가 AppContainer를 조작하게 하는 유저 인터페이스를 제공한다. 아는 HTML 및 Java에 기록된 코드를 가진 Java Servlet를 사용해서 AppContainer가 밀봉되고, 개봉되게 함으로써 행해진다. 페이지는 클라이언트에서 수행되는 애플리케이션의 일부에서 정의되는 List 및 Edit AppContainer를 요청한다.
인증 서버는 클라이언트 디바이스로부터 AppContainer를 수신할 수 있다. 클라이언트 디바이스는 AppContainer를 인증 서버에 전송하는 것을 가능하게 하는 기능을 가지고 있다. 이를 가능하게 하기 위해 엔트리 포인트가 인증 서버에 존재한다. 이는 입력 스트림을 판독하고, 파일명에 따라서 파일에 데이터를 기억하는servlet을 사용하거나 더 간단하게는 인증서버상에서 HTTP의 PUT 방법을 가능하게 함으로써 행해질 수 있다.
콘테이너 및 키를 설명하겠다. 콘테이너는 정보를 유지하기 위해 사용되는 구조를 하고 있다. 이 정보는 서명되거나 암호화된다. 콘테이너의 다양한 타입의 보안을 증가시키는 것이 가능하다. 이들 콘테이너의 일부는 서명된 데이터에만 사용된다. 일부 콘테이너는 암호화된 데이터를 보유한다. 심지어 암호화된 콘테이너 내애서도 , 사용되는 암호화 알고리즘에 의존하는 몇개의 아류형이다. 네종류의 콘테이너가 존재한다.
서명된 콘테이너는 개인키로 디지털 서명되고(서명 Key쌍으로부터), 매칭 공개키(공개키가 ROM/플래시에 기억된 클라이언트의)를 가지고 입증함으로써 입증될 수 있는 데이터를 홀딩한다. 이들은 디바이스 인증 서버로부터 클라이언트 머신으로 인증된 소프트웨어 모듈이 데이터를 전송해서 소프트웨어 모듈이 디바이스 권한인증 클라이언트 서비스를 사용하는 권한을 인증받기 위해 사용된다.
AppContainer는 특정 머신에서 수행되고 있는 특정 애플리케이션 프로그램에 의해서만 판독되고 기록될 수 있는 보호된 콘테이너이다. 이들 콘테이너는 그들은 밀봉한 프로그램을 식별해서 다른 프로그램이 콘테이너를 개봉하지 못하게 하고, 이로써 내부 처리 통신의 보안 방식으로 사용될 수 있다. 바이러스 변형 검출, 소프트웨어 라이센싱, 및 방화벽과 같은 하이 레벨 보안 기능은 AppContainer의 최상위에서 이루어진다. 일반적으로 AppContainer는 암호화를 위한 비밀 마스터 키의 파생물을 사용해서 주어진 머신으로 바운드된다.
PubContainer는 RSA공개키(통신 키 쌍으로부터)를 가진 클라이언트(OSD)에 의해 밀봉되고, 매칭 공개키를 가진 수신자(일반적으로 디바이스 권한인증 서버)에 의해서만 판독될 수 있는 디지털 봉투이다. 이들은 가입하는 동안 클라이언트와 인증된 디바이스 권한인증 서버사이의 암호화된 채널을 세팅하기 위해 사용된다. 이들 콘테이너내의 데이터는, 운영 시스템 드라이버에 의해 랜덤하게 생성되는 128-비트 c 암호문 키(또는 이 제품에서는 마스터 키라고도 한다)를 가지고 암호화된다. RC6 키(마스터 키) 및 클라이언트 키 ID(KID)는 수신자의 공개키(서버의 통신 PubKey)를 가지고 암호화된다.
MKContainer는 이 콘테이너의 기록기 및 판독기로 공지된 마스터 키(클라이언트에 의해 생성되어서 PubKContainer에 전송된)에 기초해서 디지털 봉투의 일부로 사용된다. 이들은, 공개키가 PubKContainer를 통해서 서버로 전송된 이후에 클라이언트와 디바이스 권한 인증 서버와의 사이의 통신을 보증한다. 이들은 클라이언트 머신상에서 국지적으로 데이터를 보호하기 위해 사용된다.
이들 콘테이너 구조는 이들에서 수행될 수 있는 소정의 동작의 세트를 가지고 있다. 이들 동작은 밀봉되고 개봉된다.
밀봉하는 것은 암호화 하지 않고 서명하는 것이 될 수 있다(마치 대학교 졸업장에 대학교의 봉인이 찍혀있지만 모두 졸업장의 내용을 읽을 수 있는 것과 같이). 밀봉은 암호화될 수 있다(마치 대회의 수상자가 들어 있는 봉투가, 봉투를 개봉하지 않고서는 아무도 그 내용을 보지 못하는 것과 같이).
개봉은 밀봉동작을 보류하는 것이다. 이는 밀봉이 원본임을 증명한다(마치졸업장 상의 봉인이 입증할 수 있지만 재생산할 수 없는 것과 같이). 개봉은 히든 내용을 노출할 수 있다(대회의 경우에 히든 내용이 되는 것이 공정하게 용이하듯이).
각각의 콘테이너 내용은 후술된다. 콘테이너 구조는 밀봉 동작의 설명에 따는 개봉 버젼에 도시된다. 개봉 동작의 설명에 따른 밀봉된 구조가 도시된다. 어떤 이유로 동작이 실패하면, 콘테이너는 제로가 된다.
하기 리스트는 본 발명에 의해 제공된 기능을 아이템화한다. 작은 세트의 콘테이너 타입은 a)통신보안, b)시스템 보전, c) 애플리케이션 특정 보호 콘테이너를 지원한다. 본 발명에 의해 제공되는 기능은 클라이언트와 디바이스 권한 인증 서버사이의 비밀 마스터 키를 생성하는 것을 가능하게 해서 데이터 콘테이너, 또는 특정 디바이스에서만 의미있고, 유저에 의해서 보다는 프로그램 식별자에 기초한 데이터로의 액세스를 제어하고, 권한 인증된 디바이스 권한인증 서버로부터의 정보를 인증하고, 특정 디바이스로부터의 정보를 인증하고, 템퍼 입증 비밀을 유지하기 위해 필요한 애플리케이션 프로그램용 보안된 실행환경을 지원하고, 특정 프로그램에 의해서만 덮어쓰기 될 수 있는 데이터 기억 영역을 지원하는 명령어의 생성을 가능하게 한다.
본 발명의 설명의 개요가 개시된다. 보호된 콘테이너는 로우-레벨 BIOS 코드 및 OS 레이어 드라이버 (OSD)코드(예를들어, Win98하에서의 VXD)에 의해 실시된다. 일부 BIOS 코드는 System Management Interrupt(SMI)를 통해서 호출된 경로에 의해 사용되는 System Managed Memory(SMM)에 정보를 셋업하기 위해 POST동안 사용된다.SMI경로는 플래시 ROM으로부터 공개키를 사용해서 RSA동작을 수행하고, 따라서 이들은 함께 템퍼하기 어렵다. SMI경로는 디바이스 및 디바이스 권한부여 서버에 공지된 비밀 RC6키인 비밀 마스터 키를 숨겨서 관리한다. 암호화 프리미티브는 단일 목적으로 사용되는 키를 가지고, 단일 128비트 마스터 키로부터 다중키를 유도한다. SMI 경로는 그들의 호출자를 인증하고, 인증된 운영 시스템 드라이버 모듈용 서비스만을 수행할 것이다.
모든 클라이언트는 서버의 공개키를 알고 있어서, 서버는 매칭 개인키를 알고 있는 유일한 사람이기 때문에, 서버가 메시지를 서명했다는 것을 입증한다. 만약 메시지가 비밀 마스터 키에 의해서 적절하게 보호되면, 메시지는 그 유일한 비밀 마스터 키를 가지고 있는 서버 또는 클라이언트로부터 왔을 것이다. 클라이언트를 비밀 마스터 키의 SHA1인 29 바이트 키 식별자를 사용해서 자신을 식별시킨다. SHA1함수는 KeyID를 아는 것은 침입자가 비밀 마스터 키를 발견하는데 도움을 주지 못할 것이라는 점에서 단방향이다. 이들 어프로치가 실용화될 다수의 비밀 마스터 키 값(2에서 128승까지)이 존재한다.
AppContainer는 비밀 마스터 키의 도움을 받아서 보증된다. 각각의 콘테이너는 비밀 마스터 키의 함수와 콘테이너를 소유한 프로그램의 코드의 디지트인 키를 가지고 암호화된다. 이 디자인은 SMI레벨 코드만이 콘테이너를 생성한 프로그램용 콘테이너를 개봉할 것이라는 것을 보증한다. 디바이스 권한 인증 서버는 특정 머신상의 특정 프로그램에 대해서 제 1 콘테이너를 생성하는 것을 포함한다.
미들-레벨 운영 시스템 드라이버 코드는 콘테이너 압축을 지원해서 SMI경로에 불가능한 동작을 수행한다. 예를들어, SMI경로는 페이지 오류를 취하지 않아서, 운영 시스템 드라이버 경로는 SMI경로를 호출하기 전에 로크된 메모리에 파라미터를 카피해야한다.
콘테이너 함수를 지원하는 운영 시스템 드라이버는 WDL의 일부로서 시퀀서에 의해 내려받기된다. WDL의 인스톨 및 초기화 과정은 보호된 콘테이너에 요구되는 마스터 키를 셋업하는 것을 포함한다.
이 릴리스에서 보안 특징을 지원하기 위하여 사용되는 프로토콜은 이 명세서에서 기술된 4 종류의 컨테이너에 중하게 의존한다. 예컨대, 마스터 키를 생성하는 가입 프로토콜은 이러한 컨테이너를 디바이스 인증 서버와 교환하는데 근거를 두고 있다.
시스템은 클라이언트 시스템 그 자체 및 클라이언트와 디바이스 인증 서버사이의 데이터 및 프로그램의 프라이버시, 완전성 및 인증을 제공하기 위하여 암호화 키를 사용한다. 실재하는 키 및 그러한 키가 신뢰와 기밀 보안을 달성하기 위하여 어떻게 사용되는가를 지금 설명할 것이다.
공개/비밀 키 페어가 본원발명에서 채용된다. 공개/비밀 키-페어가 특정 클라이언트 시스템과 결합될 필요가 없는 데이터를 안전하게 트랜잭션하기 위하여 사용된다. 공개/비밀 키-페어는 어떠한 클라이언트로부터 디바이스 인증 서버로 전송되거나 그 반대방향으로 전송된 데이터가 인증된 것을 보증하기 위하여 주로 사용되며, 데이터가 비밀화(암호화)되는 것을 용이하게 할 것이다. 공개/비밀 키-페어는 제조시에 ROM내에 포함된다.
디바이스 인증 서버는 다른 목적을 위해 사용되며 서버 환경내에서 다른 위치에 기억되는 3개의 RSA 키-페어의 비밀키를 보유한다. 클라이언트 시스템은 ROM내에 기억된 3개의 키-페어의 공개키를 보유한다. 표준(스트롱) 암호작성법을 위하여, 이러한 각각의 키-페어의 1024-비트 버전이 사용된다. 3개의 키-페어는,
루트 키-페어. 비밀키는 인터넷에 부착되어 있지 않은 디바이스 인증에 의해 제어되는 장치내에 기억된다. 매칭 공개키는 클라이언트 머신의 ROM내에 기억된다. 비밀 루트 키는 진부한 공개키를 대체하기 위하여 클라이언트 머신으로 전송된 새로운 공개키를 승인하기 위해 사용된다. ROM내의 오래된 키를 대체하는 방법은 본 명세서의 범위밖이다. 이러한 루트 키는 드물게 사용될 것이다. 공개키는 승인된 컨테이너를 구비한 클라이언트 시스템내에서 사용된다.
서버 통신 키-페어. 이것 또한 숨기는 키-페어로 불려지며, 동적 데이터 승인을 위해 사용된다. 비밀키는 디바이스 인증 서버상에 기억되며, 클라이언트와 안전한 통신을 이루기 위하여 사용된다. 비밀키는 클라이언트에 의해 전송된 키(및 어떠한 다른 데이터)를 개봉하기 위하여 또는 클라이언트에 의해 확인될 동적으로 생성된 메시지를 승인하기 위하여 사용될 수 있다. 비밀키는 PubKContainer로 사용된다. 모든 클라이언트는 BIOS ROM내에 기억된 매칭 공개키의 사본을 가진다.
승인 키-페어. 비밀키는 인터넷으로부터 직접적으로 액세스할 수 없는 디바이스 인증 승인 머신에 기억된다. 비밀키는 디바이스 인증 서버상에 위치하여, 결과적으로 클라이언트 머신으로 전송되는 다운로드 파일(프로그램 및 구성 데이터)를 승인하기 위하여 사용된다. 모든 클라이언트 머신은 매칭 공개키를 구비하여,비밀키에 의해 생성된 서명(signature)을 확인할 수 있다. 승인 키-페어는 소프트웨어 구성요소의 새로운 릴리스와 같은 정적 정보를 확실히 인증하기 위하여 사용된다. 비밀키는 인터넷으로부터 액세스될 수 없기 때문에, 보호하기가 더 쉽다.
공개키는 승인된 컨테이너를 구비하는 클라이언트 시스템내에서 사용된다. 모든 상기 작동을 위하여 단지 하나의 키-페어를 사용하는 것이 가능하다. 그러나, 다른 목적을 위하여 여러 키-페어를 사용하는 것은 전체 시스템을 정지시키는 것으로부터의 어택(attack)의 기회를 줄이기 위한 값싸고 용이한 방법이다.
시크릿 키. 동일한 키가 암화화뿐만 아니라 복호화하기 위하여도 사용된다는 점에서, 다음의 키는 대칭적 키이다.
마스터 키는 암호화/암호해재화에 사용되는 대칭 키를 생성하기 위한 베이스로서 사용된다. 이러한 키는 일반적으로 클라이언트와 서버사이의 단일 통신동안 사용된다. 이러한 키는 세션 키와 동등하다.
시크릿 마스터 키는 특정 클라이언트 시스템과 결합될 필요가 있는 데이터를 안전하게 트랜잭션하기 위하여 사용된다. 시크릿 마스터 키는 유일무이하며, 클라이언트 시스템을 인증하기 위하여 사용된다. 시크릿 마스터 키는 그것이 유일무이하게 클라이언트 시스템을 식별하기때문에 중요하다. 시크릿 마스터 키는 암호화/복호화 알고리즘에서 사용되는 다른 대칭 키를 생성하기 위한 베이스로서 사용된다. 시크릿 마스터 키는 가입 프로세스동안 디바이스 인증 서버에 의해 생성되어 클라이언트로 전송된다.
마스터 키는 클라이언트 시스템상의 디바이스 인증 서버 및 암호화 ROM 구성요소에 의해서만 단지 액세스될 수 있다. ROM 구성요소는 소프트웨어 디버거에 의해 트레이스될 수 없는 x86 프로세서용 특별 모드인 시스템 관리 모드(SMM)에서 실행된다.
시크릿 마스터 키는 AppContainer를 밀봉 및 개봉하기 위하여 클라이언트 시스템상에서 사용된다. 시크릿 마스터 키는 하나의 머신에 묶혀있으며, (디바이스 인증 서버로 먼저 전송된후, 다른 클라이언트로 전송되는 경우를 제외하고는) 전송될 수 없어야만 한다. 시크릿 마스터 키는 정규 시스템 메모리내에서 결코 노출되지 말아야 한다. 따라서 시크릿 마스터 키는 해커에 의해 포획될 수 있으며 또 다른 머신으로 전송될 수 있는 운영 시스템 드라이버 레벨까지 결코 패스(pass)되지 말아야만 한다. AppContainer를 밀봉 및 개봉하는 작동은 SMM에서 엄격하게 실행되어야만 한다. 밀봉 및 개봉하는 모든 다른 작동은 운영 시스템 드라이버층에 의해 수행될 수 있다.
키 식별자(KID)는 시크릿 마스터 키의 단방향 SHA-1 다이제스트이다. 키 ID는 클라이언트로부터 서버로 전송된 메시지에서 클라이언트를 식별하기 위하여 사용된다. 클라이언트로부터 전송된 메시지의 헤더는 키 ID를 포함하는데, 서버는 클라이언트 마스터 키에 대한 대칭 키를 찾기 위하여 시크릿 마스터 키 데이터베이스 테이블로 색인하는데 키 ID를 사용하며, 차례로 상기 대칭키는 메시지의 나머지 부분을 복호화하기 위하여 필요한 키를 유도하기 위하여 사용된다. 가입 프로세스가 아직 시크릿 마스터 키를 할당하지 않았을 때, 시크릿 마스터 키는 확실한 시크릿 마스터 키가 대체할 때까지 임시적인 랜덤 값으로 대체된다.
어떤 다수의 유도된 키는 시크릿 마스터 키 및 다른 마스터 키에 근거하여 생성된다. 키를 유도하는 어근은 유도된 키가 아래에서 설명된 키 사용 값에 근거하여 어떻게 생성되었는지를 보여준다.
키 사용 값. 이 섹션은 본원발명의 부분인 키 사용 값을 열거한다. 이러한 값은 NewKey() 함수 및 Enc()Dec() 함수로 사용된다. 이러한 함수는 다양한 컨테이너를 밀봉 및 개봉할 동안 사용된다. 사용법은 클라이언트와 서버에 대하여 다르다(이것은 재생 및 자기-재생 어택을 복잡하게 한다).
사용 명칭 코멘트
UsageAppCodeDigest 이것은 AppContainer의 AppCodeDigest 필드용 암호 키를 생성하기 위하여 사용된다.
UsageAppEncServer 이것은 서버에 의해 생성된 AppContainer용 암호키를 생성하기 위하여 사용된다.
UsageAppEncClient 이것은 서버에 의해 생성된 AppContainer용 암호키를 생성하기 위하여 사용된다.
UsageAppMacServer 이것은 서버에 의해 생성된 AppContainer용 HMAC 키 를 생성하기 위하여 사용된다.
UsageAppMacClient 이것은 클라이언트에 의해 생성된 AppContainer용 HMAC를 생성하기 위하여 사용된다.
UsageMKEncServer 이것은 서버에 의해 생성된 MKContainer용 암호키를 생성하기 위하여 사용된다.
UsageMKEncClient 이것은 클라이언트에 의해 생성된 MKContainer용 암호 키를 생성하기 위하여 사용된다.
UsageMKMacServer 이것은 서버에 의해 생성된 MKContainer용 HMAC 키를 생성하기 위하여 사용된다.
UsageMKMacClient 이것은 클라이언트에 의해 생성된 MKContainer용 HMAC 키를 생성하기 위하여 사용된다.
AppContainer에서 사용되는 키는 3 부분으로 분리된다. AppContainer의 하나의 중요한 특징은 AppContainer를 생성하기 위해 사용된 AppKey()가 시크릿 마스터 키(즉, 클라이언트 디바이스의 유일무이한 식별자)뿐만 아니라 애플리케이션 코드 다이제스트(즉, 컨테이너를 "소유"하는 소프트웨어의 유일무이한 식별자)의 함수라는 것이다. AppContainer는 특정 디바이스상의 특정 프로그램에 묶여있다. 키의 마지막 부분은 (시크릿 마스터 키와 달리) 디바이스 인증기관 및 (애플리케이션 코드 다이제스트와 달리) 일반 공중에 공지되어 있지 않다. 이 마지막 부분은 CustomerServer로 불리어진다. 그 키에 대한 어떠한 값이라도 AppContainer를 밀봉하기 위하여 사용될 수 있다. 그러나, (시크릿 마스트 키만큼 강한) 스트롱 128 비트 랜덤 값을 사용하는 것이 바람직하다.
CustomerSecret 부분은 회사가 다른 애플리케이션 코드 다이제스트를 생성하는 애플리케이션에 대하여 새로운 빌드를 입수함이 없이 손상된 애플리케이션 컨테이너를 버리는 것을 허용한다. 또한, 이 CustomerSecret는 디바이스상의 애플리케이션(즉, 안전한 로그 온 애플리케이션)의 주어진 예가 하나 이상의 서버와 데이터를 안전하게 공유하는 것을 허용한다. 각각의 서버는 동일한 디바이스상의 동일한 애플리케이션으로 유일무이한 CustomerSecret를 셋업할 것이다. 따라서, 정확한 CustomerSecret가 제공되면, 밀봉된 AppContainer가 단지 복호화될 수 있다.
CustomerSecret는 특정 클라이언트 애플리케이션과 클라이언트 애플리케이션이 연결되는 많은 서버중의 하나사이에서 공유되도록 의도되어진다.
디바이스 인증 서버는 벤더(vendor)에 디바이스 인증으로 가입된 디바이스에 대한 AppKey의 리스트를 부여함으로써, AppContainer를 생성하는 인증을 소프트웨어의 특정 벤더(vendor)에 위임하는 것이 가능하다. AppKey는 시크릿 마스터 키와 애플리케이션 코드 다이제스트의 암호화 단방향 함수이며, 따라서 벤더는 벤더가 다른 애플리케이션에 대한 컨테이너를 생성할 필요 없이 또는 벤더가 주어진 디바이스에 대한 마스터 키를 이해하는 것을 쉽게 할 필요 없이 이러한 키를 부여받을 수 있다.
컨테이너 Opcode 및 Format이 지금 설명될 것이다. 모든 컨테이너는 연산코드 바이트(명령 및 메시지 타입), 포맷 바이트, 및 이어지는 내용의 길이 워드(16-비트)를 포함하는 공통 4-바이트 헤더를 구비한다. 포맷 바이트는 컨테이너의 4가지 타입중 어느 것이 존재하는지를 지시하여, 저-레벨 루틴이 어떠한 종류의 암호화 작동이 수행될 필요가 있는지를 인지한다. 포맷 바이트는 암호화 알고리즘이 나중의 릴리스에서 변하면 변화할 것이다. OP코드 바이트는 컨테이너 내부에 있는 고-레벨 데이터의 종류를 나타낸다. 저-레벨 루틴은 OP코드 값중 어떤 것(예컨대, 가입 프로토콜동안 사용되는 컨테이너용)을 사용하지만, 대부분은 고-레벨 코드 또는 나중의 릴리스에 의한 사용이 가능하다. 길이 필드는 컨테이너에 속하는 (헤더 다음의) 바이트의 수를 식별한다. 헤더는 암호화되지 않지만, 모든 컨테이너의 일부분인 암호화 체크섬에 의해 보호된다.
이 부분은 정의된 컨테이너 OP코드 및 그 OP코드를 가지는 컨테이너의 포맷을 열거한다. 현재의 릴리스에서, 각각의 OP코드는 비록 나중에는 변할지라도 특정 컨테이너 포맷을 의미한다. OP코드 필드와 포맷 필드 둘 다 구비하는 목적은 코드의 적층을 단순하게 하고, 암호화 알고리즘에서의 나중의 변화 및 특정한 작동을 위해 요구되는 데이터의 내용에서의 변화를 허용하기 위함이다.
포맷 바이트는 다음의 값중 하나를 가질 수 있다.
포맷 코드 값 설명
FmtSignedContainer 1 컨테이너는 Signed Container
FmtAppContainer 2 컨테이너는 App Container
FmtPubKContainer 3 컨테이너는 PubK Container
FmtMKContainer 4 컨테이너는 MK Container
OP코드의 값은 다음과 같다.
OP 코드의 명칭 값
OPC_OSD_AUTHORIZATION 0x01
OPC_OSD_ALLOW_TRANSFER 0x02
OPC_MK_KEY 0x03
OPC_INITIAL_APP_CONTAINER_FROM_SERVER 0x04
OPC_CUSTOM_APP_CONTAINER_DATA 0x05
OPC_CHALLENGE_RESPONSE_FROM_CLIENT 0x06
OPC_SMK_ENROLL_REQUEST_OUTER 0x07
OPC_NEW_CONNECTION 0x08
OPC_SMK_ENROLL_REQUEST_INNER 0x09
OPC_SMK_ENROLL_RESPONSE 0x0a
OPC_CLIENT_TO_SERVER_WRITE 0x0b
OPC_SERVER_TO_CLIENT_WRITE 0x0c
OPC_CHALLENGE_REQUEST_FROM_SERVER 0X0e
SignedContainer에 대한 연산코드가 지금부터 설명될 것이다. SignedContainer는 (승인 키-페어로부터) 비밀키에 의해 디지털 방식으로 승인된 데이터를 유지(hold)하며, (공개키가 ROM에 기억되어 있는 클라이언트에서의) 매칭 공개키로 확인될 수 있다. 이런 것들은 인증된 데이터를 디바이스 인증 서버로부터 클라이언트 머신으로 전송하는 데 사용되며, 클라이언트 서비스를 사용하기 위하여 소프트웨어 모듈을 인증하기 위하여 사용된다.
Opcode:OpcOsdAuthorization Container:FmtSignedContainer
컨테이너는 운영 시스템 드라이버 보안 모듈에서 일부 또는 모든 함수를 사용하기 위한 프로그램을 인증하기 위하여 사용된다. 컨테이너는 컨테이너의 데이터부에 다음의 필드를 구비한다.
필드 길이 설명
NStartOffset 4바이트 호출 코드의 스타팅 오프셋
NEndOffset 4바이트 호출 코드의 엔딩 오프셋
CodeDigest 20바이트 호출 코드의 코드 다이제스트
PrivalegeBitVector 8바이트 특정 비트 필드.
이 벡터는 애플리케이션이 어떤 함수를 호출하는가를 지시힌다.
Opcode:OpcOsdAllowTransfer 컨테이너:FmtSignedContainer
이 컨테이너는 프로그램에 AppContainer를 이 머신상의 또 다른 애플리케이션으로 전송하는 권한을 부여하는데 사용된다. 컨테이너는 컨테이너의 데이터부내에 다음의 필드를 구비한다.
필드 크기 설명
CallersAppCodeDigest 20바이트 호출자의 ACD
RecipientsAppCodeDigest 20바이트 수신자의 ACD
Opcode:No OpcBiosAuthorization No FmtSignedContainer
이것은 컨테이너가 아니고 서버 비밀 승인 키에 의해 암호화되는 복수의 바이트이다. 그것들은 어떠한 종류의 컨테이너에도 기억되지 않는다. 이러한 바이트는 BIOSRegisterOSD() 함수를 사용하여 BIOS로 등록할 때, 운영 시스템 드라이버에 의해 사용된다.
필드 크기 설명
NStartOffset 4바이트 호출 코드의 스타팅 오프셋
NendOffset 4바이트 호출 코드의 엔딩 오프셋
CodeDigest 20바이트 운영 시스템 드라이버에 대한 코드 요약
AppContainer를 위한 연산코드가 이제 설명된다. AppContainer는 특정 응용 프로그램에 의해서 단지 판독 또는 가입될 수 있는 보호 컨테이너이다. 이들 컨테이너는 컨테이너에 밀봉된 프로그램을 식별하고 다른 프로그램이 컨테이너를 개봉시킬 수 있게한다. 따라서, 이들 컨테이너는 프로세스간 통신의 보안 유형으로도 이용될 수 있다. 바이러스에 의한 수정 탐지, 소프트웨어 라이센싱 및 보안 월렛과 같은 고렙ㄹ 보안 기능이 AppContainer의 최상위에 구축될 수 있다. 일반적으로 AppContainer는 암호화를 위한 마스커 키의 유도체를 이용함으로써 주어지 머신에 제한된다.
연산코드: OpcMKKey FmtAppContainer
이 컨테이너는 MKContainer에 이용된 키를 보유한다. 이 컨테이너는 일반적으로 PubKContainer의 생성 동안 OsdPubKContainer에 의해 반환된다. MKContainer 동작은 상기 컨테이너를 필요로 한다.
연산코드: OpcInitialAppContainerFromServer Container: FmtAppContainer
이 컨테이너는 엠프티 상태에 있고 다른 AppContainer를 생성하기 위해 애플리케이션을 위한 템플리트로서 사용된다. 그 내부에서 유효 필드는 암호화된 AppCodeDigest이다. 밀봉자 코드 요약은 필드는 이 경우에 널 상태로 있다. 이 AppContainer를 밀봉시키는 데 사용된 CustomerSecret의 모든 비트는 제로이다.
연산코드: OpcCustomAppContainerData Container: FmtAppContainer
이 컨테이너는 엠프티 상태에 있고 다른 AppContainer를 생성하기 위해 애플리케이션을 위한 템플리트로서 사용된다. 그 내부에서 유효 필드는 암호화된 AppCodeDigest이다.
연산코드: OpcChallengeResponseFromServer Container: FmtAppContainer
이 컨테이너는 클라이언트로부터 서버로의 챌린지 응답을 보유한다. 그것은 서버 챌린지 난수(Rs)를 보유한다. 이 컨테이너는 OpcChallengeResponseFromServer로 MKContainer에 대한 응답에 사용된다.
필드 길이 설명
Rs 16 바이트 서버에 의해 제공된 128-비트 랜덤 값. 또는 등록에 대 한 승인으로서 사용될 때 KID∥MK.
PubKContainer를 위한 연산코드가 이제 설명된다. PubKContainer는 (통신 키-쌍에서의) RSA 공개키로 클라이언트(OSD)에 의해 밀봉되고 매칭 비밀키로 수신자(일반적으로 장치 인증 서버)에 의해서만 판독될 수 있는 디지털 편지봉투이다. 이것들은 등록 동안 및 클라이언트와 인증된 장치 인증 서버간의 암호화된 채널의 셋업을 위해 사용된다. 이 컨테이너 내부의 데이터는 운영 시스템 드라이버에 의해 랜덤하게 발생되는 128-비트 RC6 암호 키(또한 이 제품에선 마스터 키로 불림)로 암호화된다. RC6 키(마스터 키) 및 클라이언트의 키는 수신자의 공개 키(서버의 통신 PubKey)로 암호화된다.
연산코드: OpcSMKEnrollRequestOuter Container: FmtPubKContainer
이 컨테이너는 등록 동안 사용된다.
연산코드: OpcWDLNewConnection Container: FmtPubKContainer
이 컨테이너는 새로운 암호화된 채널을 셋업시키기 위해 클라이언트 애플리케이션에 의해 사용된다. 이 컨테이너의 제1 부분은 RSA 동작을 방지하기 위해 재사용된다. 그것은 내부 MKContainer의 데이터 부분에 다음과 같은 필드를 갖는다.
필드 길이 설명
MK 16 바이트 128-비트 새로운 연결 마스터 키
MKContainer를 위한 연산코드가 이제 설명된다. MKContainer는 이 컨테이너의 가입자 및 판독자에게 공지된 마스터 키(클라이언트에 의해 생성되어 PubKContainer에 전송된)를 기초로 하여 디지털 편지봉투의 일부분으로서 사용된다. 이것들은 마스터 키가 PubKContainer를 통해 서버에 전송 된 후 클라이언트와 장치 인증 서버간의 통신을 안전하게 하는 데에 사용될 수 있다. 이것들은 클라이언트 머신에 국부적으로 데이터를 보호하는 데에 사용될 수 있다.
연산코드: OpcSMKEnrollRequestInner Container: FmtMKContainer
이 컨테이너는 등록 동안 사용된다. 그것은 컨테이너의 데이터 부분에 다음고 같은 필드를 갖는다.
필드 길이 설명
SMKClientSeed 20 바이트 마스터 키를 발생하는 데에 사용된 Seed.
연산코드: OpcSMKEnrollResponse Container: FmtMKContainer
이 컨테이너는 등록 동안 사용된다. 그것은 컨테이너의 데이터 부분에 다음고 같은 필드를 갖는다.
필드 길이 설명
SMKServerSeed 26 바이트 마스터 키를 발생하는 데에 사용된 서버로 부터 복귀된 Seed.
연산코드: OpcClientToServerWrite Container: FmtMKContainer
이 컨테이너는 데이터를 서버로(즉, 클라이언트에 의해 가입된 데이터를) 전송하기 위해 몇몇 클라이언트에 의해 사용된다.
필드 길이 설명
데이터 0-64000 바이트 클라이언트 특정 데이터
연산코드: OpcServerToClientWrite Container: FmtMKContainer
이 컨테이너는 데이터를 서버로 데이터(즉, 클라이언트에 의해 가입된 데이터를)를 수신하기 위해 일부 클라이언트에 의해 사용된다.
필드 길이 설명
데이터 0-64000 바이트 클라이언트 특정 데이터
연산코드: OpcChallengeRequestFromServer Container: FmtMKContainer
이 컨테이너는 클라이언트 시스템의 인증을 수립하기 위해 서버에 의해 전송된다. 이 컨테이너에 대한 응답은 OpcChallengeRequestFromServer에 있다.
필드 길이 설명
Rs 16 바이트 서버에 의해 제공된 128-비트 랜덤 값
기타 연산코드는 새로운 애플리케이션을 위해 정의될 수 있다. 시스템 애플리케이션 프로그램 인터페이스를 이용하는 애플리케이션은 장치 인증에 의해 그것들에 제공된 연산코드를 따르고 이를 사용할 수 있어야 한다.
AppContainer의 포맷과 이를 생성하기 위해 사용된 알고리즘은 아래에 설명된다. 처음에 개봉된 포맷이 설명되고 그후 그것을 개봉 및 밀봉하기 위한 단계들이 설명된다.
프로그램이 한 AppContainer을 가지면 그것은 그 컨테이너의 사본을 생성하고 상이한 정보로 그들의 사본을 채울 수 있다. 그러나, 제1 AppContainer을 획득하기 위한 유일한 방법은 장치 인증 서버가 그 특정 머신상에 그 특정 프로그램을 위한 하나를 생성하게 하는 것이다. 이것은 AppCodeDigest에 관련된다.
AppContainer는 마스터키라 불리는 대칭 키를 기억하는 데에 사용된다. 이 컨테이너는 그후 마스터키를 필요로 하는 밀봉/개봉 동작을 수행하는 함수에 전달된다. AppContainer는 또한 등록 동안 할당되었었던 그것의 공유마스터키에 의해 식별되는 주어진 머신에 특정한 애플리케이션에 특정한 정보를 기억하는데에도 사용된다. 이 애플리케이션은 각각의 서버가 그 자신이 소유한 AppContainer를 암호화할 수 있는 경우에만 일-대-일 기준에 따른 다양한 서버로 정보를 공유할 수 있다.
개봉된 AppContainer는 다음과 같은 포맷을 갖는다. 컨테이너를 밀봉시키는 데 포함된 단계들은 21 내지 36 바이트의 정보를 끝(MAC 및 패딩)에 다하고, 따라서 호출자는 버퍼가 밀봉된 더욱 큰 포맷을 유지하는 데 충분한 크기이고 그렇지 않으면 밀봉 동작이 에러를 나타내는 것을 보장해야 한다. SealerCodeDigest 및초기화 벡터(IV)는 밀봉 동작에 의해 채워진다. 초기화 벡터는 암호 블록 체이닝에 사용된 난수이다. CBC에서, IV는 그것이 키로 암호화되기 전에 평문의 제1 블록과 제1 XOR 연산된다. AppCodeDigest는 장치 인증에 의해 제공된 본래의 AppContainer로부터 취해진다. AppContainer 구조는 표 1에 도시되어 있다.
AppContainer를 밀봉함. 암호화는 마스터 키, AppCodeDigest 및 CustomerSecret(전체 128 비트는 대부분의 시간에 디폴트값으로서 제로가 될 수 있다)의 유도체로 수행된다.
운영 시스템 드라이버를 밀봉함. 이 동작은 바이오스에 의해 밀봉되어져야 할 데이터를 준비한다. 그것은 장치 인증에 의해 제공된 본래의 AppContainer를 필요로 한다. 이 본래의 AppContainer는 이 특정 클라이언트 시스템을 위해 마스터 키를 사용하는 이 특정 클라이언트 시스템에 대해 암호화된다.
장치가 유효 비밀 마스터 키를 가짐을 확인한다. 어떠한 에러도 나타내지 않으면, 길이가 수용할 정도로 작음을 확인한다. 이것은 AppContainer를 포함하여 시작하고 데이터 필드를 포함하여 종료하는 컨테이너의 길이이다. 포맷이 FmtAppContainer와 동일함을 확인한다. 초기화 벡터를 운영 시스템 드라이버 보안 모듈에 의해 전달된 랜덤 값으로 설정한다. SealerCodeDigest를 OsdRegisterApplication() 동안 호출자의 인증 정보를 기초로 하여 운영 시스템 드라이버 보안에 의해 계산된 값으로 설정한다. 운영 시스템 드라이버 AppContainer 밀봉 동안 구조 수정이 표 2에 도시되어 있다.
BIOS AppContainer 밀봉은 데이터가 밀봉되기 이전의 최종 단계이다.
DecryptedCodeDigest = Dec160Bits(AppCodeDigest)라 놓는다. 컨테이너내의 AppCodeDigest는 밀봉 동작에 의해 변경되지 않는다. 이것은 애플리케이션이 장치 인증에 의해 제공된 본래의 AppContainer를 기초로 하여 새로운 AppContainer를 생성할 수 있게 한다.
DecryptedCodeDigest는 운영 시스템 드라이버 보안 모듈에 의해 결정된 CallersCodeDigest 값과 동일함을 확인한다.
키 = CustomerAppKey(AppKey(SMK,AppCodeDigest), CustomerSecret)라 놓는다. 여기서 CustomerSecret은 운영 시스템 드라이버에 의해 하향 전달된 값이다.
PayLoad = 연산코드∥포맷∥길이∥AppCodeDigest∥IV∥SealersCodeDigest∥데이터 라 놓는다.
Mac = HMAC(NewKey(Key,UseageAppMac),Payload)로 놓는다.
16 바이트 길이의 배수인 가변, 평문(아래를 참조)을 만들기 위해 Padding을 1 내지 16 바이트의 벡터로 설정한다. 각각의 패딩 바이트는 벡터내의 패딩 바이트의 수와 동일한 값을 갖는다.
평문 = IV∥SealersCodeDigest∥데이터∥Mac∥패딩 이라 놓는다.
암호문 = Enc(Key,UseageAppenc, 평문) 이라 놓는다. 암호문의 길이는 평문과 동일하게 됨을 주목해야 한다.
AppCodeDigest 후의 모든 필드를 암호문으로 중복기재한다. 즉, 평문을 구성하는 모든 바이트를 암호문의 바이트로 대체한다.
길이를 평문내의 바이트의 수에 20(AppCodeDigest를 위해)을 다하느 것으로설정한다.
SMI AppContainer 밀봉 동안 구조 수정은 표 3에 도시되어 있다. BIOS가 밀봉된 AppContainer 구조를 밀봉한 후 그것은 표 4에 도시된 포맷을 갖는다.
AppContainer 개봉이 이제 설명된다. 운영 시스템 개봉 동작은 컨테이너를 개봉하기 위해 BIOS에 의해 획득된 정보를 수집한다. 이것은 길이가 수용가능하게 작음(###todo: 바이트 또는 이보다 작은 올바른 값을 획득) 확인함으로써 수행된다. 이것은 Mac 및 패딩을 포함하고, 포맷이 FmtAppContaine와 동일함을 확인하고, OsdRegisterApplication() 동안 제공된 호출자의 승인 정보에 기초하여 CallersCodeDigest를 계산하는 컨테이너의 길이이다.
BIOS 개봉은 데이터를 개봉시키도록 동작한다. BIOS 개봉 동작은 다음단계들을 수행한다.
장치가 유효 마스터 키를 갖고 있음을 확인한다. 그렇지않다면, 에러를 나타낸다.
DecryptedCodeDigest = Dec160Bits(AppCodeDigest)라 놓는다. 컨테이너내의 AppCodeDigest는 개봉 동작에 의해 변경되지 않는다.
DecryptedCodeDigest가 운영 시스템 드라이버 보안 모듈에 의해 결정된 CallersCodeDigest 값과 동일함을 확인한다.
키 = CustomerAppKey(AppKey(SMK,AppCodeDigest), CustomerSecret)이라 놓는다. 여기서 CustomerSecret은 운영 시스템 드라이버에 의해 하향전달된 값이다.
암호문 = 길이 마이너스 20 바이트까지 AppCodeDigest 다음의 데이터라 놓는다.
평문 = Dec(키,UsageAppEnc,암호문)로 놓는다.
개봉된 필드를 나타내기 위해 암호문 바이트를 평문 바이트로 대체한다.
길이 = 길이 마이너스 20 마이너스 패딩-길이로 놓는다.
Payload = 연산코드∥포맷∥길이∥AppCodeDigest∥IV∥SealersCodeDigest∥데이터로 놓는다.
Mac ExpectedMac와 동일함을 확인한다.
MKContainer의 포맷과 이를 생성하기 위해 사용된 알고리즘이 이제 설명된다. 먼저 개봉된 포맷이 설명되고 개봉 및 밀봉시키는 단계가 설명된다. MKContainer는 주로 클라이언트와 서버가 PubkContainer를 사용하여 공통 마스터 키를 셋업한 후 이들 사이에 전송된 정보의 큰 덩어리(최대 64K)를 보호하는 데에 주로 사용된다.
MKContainer는 주로 데이터를 암호화하는 데에 사용된다. 암호화는 대칭 키 암호화를 기초로 한다. 이 키는 마스터 키로부터 유도된다. MKContainer는 마스터 키로부터 유도된 대칭 키를 사용하여 데이터의 큰 덩어리(최대 64K)를 암호화시키는 데에 사용될 수 있다. 특정한 경우의 사용은 비밀 마스터 키를 셋업시킬 수 있도록 하기 위해 등록 동안 클라이언트와 서버간의 전송을 암호화하고, 몇몇 클라이언트 애플리케이션과 장치 인증 서버간의 전송을 암호화한다.
개봉된 MKContainer 구조가 이제 설명된다. MKContainer는 AppContainer와 매우 유사하다. 주요한 차이는 MKContainer가 이미 셋업된 마스터 키의 요약으로대치된다는 것이다. SealedCodeDigest는 서버에 의해 생성된 MKContainer를 위해 제로로 된다. 클라이언트엣 생성된 컨테이너에 대해, SealedCodeDigest는 밀봉된 그 컨테이너가 프로그램임을 식별한다.
MKContainer상에서의 암호화 동작은 SMI 모듈 보단 운영 시스템 드라이버 모둘에 의해 수행된다. 운영 시스템 드라이버는 마스터 키를 개봉 및 밀봉하기 위해 SMI 모듈을 사용지만, 모든 암호화 및 완전성 검사는 OSD 코드에 의해 수행된다.
개봉된 MKContainer는 다은 포맷을 갖는다. 컨테이너를 밀봉시키는 데에 포함된 단계들은 21 내지 36 바이트의 정보를 끝(Mac 및 패딩)에 추가하고, 따라서 호출자는 버퍼가 밀봉된 큰 포맷을 유지하기에 충분하거나 아니면 밀봉 동작이 에러를 나타냄을 보장해야 한다. MKDigest, SealedCodeDigest 및 IV는 밀봉 동작으로 채워진다. 표 1은 MKContainer 구조를 도시한다.
암호화는 AppContainer(OSDPubKContainerSeal()을 호출할 때 생성되었던)에 전달된 마스터 키의 유도체로 MKContainer를 밀봉하는데에 사용된다.
OSD MKContainer 컨테이너를 밀봉하는데에 필요한 단계들은 다음과 같다. 이들 단계는 제위치에 있는 버퍼상에서 동작하고 개봉된 명문 데이터를 중복기재한다. Usage 값은 사용 값에 대한 섹션에서 설명된 바와 같이 클라이언트와 서버에 의해 밀봉된 컨테이너와 상이하게 됨을 주목해야 한다.
밀봉 동작은 마스터 키를 갖춘 AppContainer가 사용되어 질 것을 필요로 한다. 밀봉 단계들은 다음과 같다.
길이가 허용가능함을 확인한다. 이것은 동작이 동작 시스템 드라이버에 의해 수행되기 때문에 AppContainer보다 클 수 있다. 이것은 MKDigest 필드를 포함하고 MKDigest 필드로부터 시작하여 데이터 필드를 포함하고 데이터 필드로 끝나는 컨테이너의 길이이다.
포맷이 FmtMKContainer와 동일함을 확인한다.
MKDigest 값을 MK를 보유하는 개봉된 AppContainer의 내용의 SHA1으로 설정한다.
IV를 운영 시스템 드라이버 보안 모듈에 의해 전송된 랜덤 값으로 설정한다.
SealedCodeDigest를 운영 시스템 드라이버 보안 모듈에 의해 결정된 값으로 설정한다.
키 = 운영 시스템 드라이버 보안 모듈에 의해 전달된 마스터 키로 놓는다.
Payload = = 연산코드∥포맷∥길이∥MKDigest∥IV∥SealersCodeDigest∥데이터로 놓는다.
Mac = HMAC(NewKey(Key,UsageMKMac),Payload)로 놓는다.
16 바이트 길이의 배수인(아래를 참조), 평문, 변수를 만들기 위해 1 내지 16 바이트의 벡터로 설정한다. 각각의 패딩 바이트는 벡터에서 패딩 바이트의 수와 동일한 값을 갖는다.
평문 = IV∥SealersCodeDigest∥데이터∥Mac∥Padding 이라 놓는다.
암호문 = Enc(키,UsageMKEnc,평문) 이라 놓는다. 암호문의 길이는 평문의 길이와 동일하게 됨을 주목해야 한다.
MKDigest 다음의 모든 필드는 암호문으로 중복기재한다. 즉, 평문으로 된모든 바이트는 암호문의 바이트로 대체한다.
길이를 평문의 바이트의 수에 20을 플러스한 것(MKDigest를 위해)으로 설정한다.
표 2는 OSD MKContainer 밀봉 동안의 구조 수정을 도시한다.
밀봉된 MKContainer의 구조는 표 3에 도시되어 있다.
MKContainer를 개봉하는 것은 운영 시스템 드라이버 개봉을 포함한다.
MKContainer를 개봉하는 데에 필요한 단계들은 다음과 같다. 에러는 컨테이너를 제로로 되게 하여야 한다. 개봉 동작은 마스터 키를 갖춘 AppContainer가 사용될 것을 필요로 한다. 개봉 단계들은 다음과 같다.
길이가 수용가능함을 확인한다. 이것은 Mac 및 패딩을 포함하는 컨테이너의 길이이다.
포맷은 FmtMKContainer와 동일함을 확인한다.
MKDigest는 운영 시스템 드라이버 모듈에 의해 전달된 값과 동일함을 확인한다.
키 = AppContainer를 통해 운영 시스템 드라이버 모듈에 의해 전달된 값으로 놓는다.
암호문 = MKDigest 다음부터 길이 마이너스 20 바이크까지의 데이터라 놓는다.
평문 = Dec(키, UsageMKEnc,암호문) 이라 놓는다.
개봉된 필드를 나타내기 위해 암호문 바이트를 평문 바이트로 대체한다.
Payload = 연산코드∥포맷∥길이∥MKDigest∥IV∥SealersCodeDigest∥데이터
라 놓는다.
ExpectedMac = HMAC(NewKey(키,UsageMKMac),Payload)라 놓는다.
Mac이 ExpectedMac과 동일함을 확인한다.
SignedContainer의 포맷과 이를 처리하는 데에 사용된 알고리즘이 이제 설명된다. 먼저 개봉된 포맷이 설명디ㅗ고 이것을 밀봉 및 개봉하기 위한 단계들이 설명된다. 이들 컨테이너는 서버로부터 클라이언트로 인증된 정보를 전송하는 데에 주로 사용된다. 예를들어, 이들 컨테이너는 운영 시스템 드라이버 모듈의 일부 함수를 호출하기 위해 프로그램을 인증하는 데에 사용된다. 이것들은 각각의 파일의 예상된 SHA1 요약 및 파일이름의 리스트를 전송하는 데에(예를들어, 다운로드된 데이터가 인증된 것임을 확인하기 위해) 사용된다. 이것들은 일정한 정보 또는 명령어가 실제로 디바이스 인증 서버로부터 주어진 것임을 사용자가 알 필요가 있는 경우에는 언제나 사용될 수 있다.
SignedContainer는 다운로드된 데이터가 인증된 것임을 확인하기 위해, 데이터가 디바이스 인증 서버로부터 주어진 것임을 확인하기 위해, 및 운영 시스템 드라이버로 등록하는 애플리케이션을 위한 인증 정보를 보유하기 위해 사용된다. 표 4는 SignedContainer 구조를 예시한다.
SignedContainer를 밀봉하는 기술이 이제 설명된다. 암호화는 비밀키를 승인하는 서버로 행해진다. SignedContainer 컨테이너를 밀봉하는 데에 필요로 되는 단계들은 다음과 같다. 이들 단계들은 제위치에 잇는 버퍼상에서 동작하고 따라서개봉된 평문 데이터를 중복기재한다. 개시된 실시예에서, 디바이스 인증 서버 플랫폼은 SignedContainer를 밀봉하기 위해 이들 단계들을 수행한다.
선택된 비밀 키가 공지되어 있음을 확인한다. 그렇지않다면, 에러를 나타낸다.
길이가 수용가능한 길이임을 확인한다. 밀봉하기 전에, 길이는 PublicKeyDigest 및 데이터를 포함한다. 포맷이 FmtMKContainer와 동일함을 확인한다.
PublicKeyDigest를 선택된 비밀 키와 매칭하는 공개키의 SHA1 요약으로 설정한다.
Payload = 연산코드∥포맷∥길이∥PublicKeyDigest∥IV∥데이터로 놓는다. 이것은 개봉된 데이터를 포함함을 알아야 한다.
ExpectedDigest = SHA1(Payload)로 놓는다.
SigRSABBlock = 108 제로 바이트 ∥ExpectedDigest로 놓는다.
SigRSABBlock상에서의 PKCS#1 버젼 2 승인 패딩을 수행한다. 이것은 PKCS#1 버젼 1 승인 패딩과 동일하다. 이 패딩은 ExpectedDigest 값이 SHA1 동작의 결과임을 지시하기 위해 요약 값 앞에 고정된 바이트 시퀀스를 추가한다. 그것은 또한 대부분의 제로 패딩 바이트를 0xFF 바이트로 대체한다.
SigRSABBlock을 선택된 비밀키로 암호화한다.
길이 = SigRSABBlock 사이즈를 포함하도록 길이 플러스 128로 놓는다.
서버가 SignedContainer 구조를 밀봉한 후 그것은 표 5에 도시된 포맷을 갖는다.
SignedContainer를 개봉하는 기술이 이제 설명된다. SignedContainer를 개봉하는 데에 필요한 단계들은 다음과 같다. 클라이언트는 이와 같은 유형의 컨테이너상에서 승인을 유효화하기 위해 이들 단계들을 수행한다.
선택된 공개키는 SMI 루틴에 공지되어 있음을 확인한다. 그렇지않다면 에러를 나타낸다. 길이가 수용가능한 길이임을 확인한다. 개봉하기 이전에, 길이는 PublicKeyDigest, 데이터 및 SigRSABBlock을 포함한다. 포맷이 FmtMKContainer와 동일함을 확인한다. 선택된 공개키로 SigRSABBlock을 해독하기 위해 BIOS를 호출한다. SHA1 요약 함수를 사용하여 PKCS#1이 승인을 위해 올바른 것임을 확인한다. ExpectedDigest = 해독된 SigRSABBlock의 마지막 20 바이트로 놓는다. 길이 = SigRSABBlock 사이즈를 제거하도록 길이 마이너스 128로 놓는다. Payload = 연산코드∥포맷∥길이∥PublicKeyDigest∥데이터로 놓는다. 이것은 개봉된 길이를 포함한다. 요약 = SHA1(Payload)로 놓는다. 요약은 ExpectedDigest와 동일함을 확인한다.
BIOS 개봉에 대해, BIOS는 컨테이너 자체에서 작동하지 않는다. 그것은 단지 SigRSABBlock을 해독하기 위해 호출될 뿐이다.
PubKContainer의 포맷과 이를 생성하기 위해 사용된 알고리즘이 이제 설명된다. 먼저 개봉된 포맷이 설명디ㅗ고 그것을 개봉 및 밀봉하기 위한 단계들이 설명된다. 이들 컨테이너는 주로 클라이언트와 디바이스 인증 서버간의 보안 통신 채널을 셋업시키기 위해 사용된다. PubKContainer의 제2 부분은 4-바이트 헤더를 포함하는 완전한 MKContainer 객체이다. PubKContainer의 제1 부분은 생성된 마스터 키(MK)와 클라이언트의 키 ID(KID)의 값을 포함하고, 이들 값은 수신자의 공개 키로 암호화된다.
PubKContainer의 포맷은 컨테이너의 제1 부분을 변경시키지 않고 이 컨테이너의 제2 부분을 변경시킬 수 있도록 주의깊게 선택된다. 이것은 클라이언트 및 서버가 일부 중요한 성능상의 개선을 구현할 수 있게 한다. OSD 밀봉 함수는 AppContainer에 내포된 생성된 마스터 키를 반환하게 된다. 클라이언트는 클라이언트가 서버에 새로운 연결(예를들어, 새로운 다운로드를 인출하기 위해)을 시작할 때 마다 PubKContainer의 제1 부분 및 MK의 기억 및 재사용할 수 있고 제2 부분은 이 세션을 암호화하기 위한 새로운 마스터 키를 포함하는 MKContainer일 것이다.
리얼 서버가 단지 기억된 마스터 키(새로운 세션 키를 해독하기에 필요한)를 식별하거나 또는 제 1 부분을 읽기위해 비밀 키를 식별하기 때문에, 이것은 SMI루틴과 함께 공개 키 작동을 수행할 필요성을 회피하고 그리고 단지 리얼 서버가 새로운 세션 키를 식별하게 될 시큐어리티 이점을 얻는다. 서버에 대한 중요한 최적화는 PubKContainer의 제 1 부분의 외부로 뽑아진 마스터 키를 기억하는 것이고 그리고 제 1 부분의 해시(hash)로 기억된 값을 인덱스하는 것이다. PubKContainer의 제 1 부분이 재생될 때, 이러한 캐시는 비밀 키 작동의 필요성을 회피한다. 클라이언트가 전체 제 1 부분을 전송하기 때문에 서버는 언제라도 캐시 엔트리를 쏟아낼 수 있고, 그래서 서버는 마스터 키를 뽑아내기 위해 비밀 키(서버 통신 비밀 키)를 언제라도 사용할 수 있다. 이것은 또한 마스터 키의 재사용 또는 창조를 다루기 위한 두개의 부니된 포멧이 아니라, 클라이언트와 서버사이의 초기 메세지에 대한 단지 하나의 포멧이 존재함을 의미한다.
PubKContainer에 대한 사용은 시크릿 마스터 키의 세팅을 허용하도록 등록하는 동안 클라이언트와 서버사이의 전송을 셋업하는 것이고, 그리고 일부 클라이언트 애플리케이션과 디바이스 인증서버사이의 전송을 셋업하는 것이다.
개봉된 PubKContainer는 테이블 10에 도시된 포맷을 가지고 있다. 컨테이너의 밀봉에 포함되는 단계는 엔드(맥 및 패딩)에 21 내지 36바이트의 정보를 부가하여, 호출자(caller)는 버퍼가 거대한 밀봉된 포맷을 지지할만큼 충분히 큰 반면 밀봉작용이 에러로 복귀하는 것을 보장해야 한다. 밀봉코드다이제스트 및 초기벡터(IV)는 밀봉작용에 의해 모두 채워져 있다.
PubKContainer를 밀봉하는 것이 이하에 논의될 것이다. 암호는 운영 시스템 드라이버 및 서버의 통신 공개 키에 의해 플라이상에 창조된 마스터 키의 유도로 끝난다.
운영 시스템 드라이버 밀봉은 바이오스 층에 대한 두 개의 콜을 포함한다. 첫번째 하나는 OsdMKContainerSeal()을 사용하는 MKContainer에 대한 것이어서 MK를 암호화하기 위한 BIOSRawRSAPublic()은 단지 MKContainer 밀봉작용에만 사용된다. 이러한 컨테이너를 밀봉하기 위해 요구되는 단계는 다음과 같다. 이러한 단계는 배치가 끝난 버퍼상에서 작동해서 개봉된 평문 데이타위에 쓰여진다. 사용값은 사용값상의 섹션으로 설면된 클라이언트와 서버에 의해 밀봉된 컨테이너에 대해서 상이할 것이다.
선택된 공개 키가 SMI 루틴으로 알려져 있음이 확인된다. 비록 에러로 복귀하지 않더라도. 길이가 수용될 수 있음이 확인된다. 밀봉전에, 이것은 제 1 부분 및 개봉된 제 2 부분의 길이이다. 밀봉후에, 제 2 부분의 밀봉에 의해 부가된 엑스트라 데이타를 포함한다. 포맷은 FmtPubKcontainer와 대등함이 확인된다. 운영 시스템 드라이버 시큐어리티 모듈 및 MKContainer에 관해 설명된 단계에 의해 패스된 MK를 사용하는 제 2 부분이 밀봉된다.
마스터 키는 PubKContainer가 처음으로 만들어 졌을 때 운영 시스템 드라이버에 의해 임의로 발생될 것이다. 이러한 마스터 키 상의 핸들은 운영 시스템 드라이버의 호출자에게 복귀되어 재사용될 수 있다. 길이 구역의 증가는 이전 단계에 의해 부가된 맥 및 패딩을 포함하기 위한 것이다. 선택된 공개 키의 SHA1 다이제스트에 대한 공개키 다이제스트가 설정된다. 헤더 값과 매치시키기 위한 PubKRSABlock의 조작부호 및 포맷부분이 설정된다. 블록의 나머지는 이러한 단계가 수행되기 전에 OSD 루틴에 의해 채워진다. 운영 시스템 드라이버 모듈에 의해 선택된 임의의 OAEP 시드(seed) 값을 사용하는 PubKRSABlock의 OAEP 패딩이 수행된다. 선택된 키와 함께 RSA 작동을 수행하기 위해 BIOSRawPublic이 호출된다. 운영 시스템 드라이버가 밀봉된 후에 PubKContainer는 테이블 11에 도시된 포맷을 갖는다.
PubKContainer의 개봉이 이하에 설명될 것이다. 본 발명에 따라 개시된 실시예에 있어서, 디바이스 인증 서버는 개봉을 수행한다. 서버로부터의 응답은 MK 컨테이너의 형태가 될 것이다. 클라이언트는 MK 컨테이너 작동을 사용하는 서버응답을 개봉할 것이다.
서버 개봉이 이하에 설명될 것이다. PubKContainer를 개봉하기 위해 요구되는 단계는 다음과 같다. 에러는 컨테이너를 0으로 맞춘다.
길이가 수용될 수 있음이 확인된다. 이것은 밀봉된 MKContainer를 포함하는 제 1 및 제 2 부분의 길이이다. 포맷이 FmtPubcontainer와 대등함이 확인된다. 공개 키에 상응하는 공개키 다이제스트가 선택된 비밀 키와 매치됨이 확인된다. 선택된 비밀 키와 함께 PubKRSABlock 상의 raw RSA 암호작동이 수행된다. OAEP 패딩의 제거 및 OAEP 리던던시(redundancy)가 정정된다(즉, 블록이 수송중에 수정되지 않는다). 이적은 호출자에 대해 관찰가능한 조작부호, 포맷, KID 및 K를 남긴다. 포맷이 FmtPubcontainer임이 확인된다. 호출자는 조작부호가 수용가능한지 아닌지를 체크할 것이다. 키는 암호화된 PubKRSABlock로부터 MK로 된다. 키를 사용하는 MKContainer 및 MKContainer에 관해 설명된 단계가 개봉된다.
암호작성법의 초기 및 공통값이 이하에 설명될 것이다.
AppKey(), NewKey(), 및 CustomerAppKey()를 포함하는 유도 키는 동일한 함수이다:
XxxKey(bufferOf128bits,
bufferOf160bitsWithTheHighOrderBitsZeroedIfDataWasLessThan160bits).
AppKey(Key,CodeDigest)=TruncateTo128bits(SHA-1(Key∥CodeDigest))
AppContainer의 보호에 대한 키는 이러한 컨테이너를 소유하는 프로그램에 대한 코드의 160-비트 다이제스트를 사용하는 시크릿 마스터 키로부터 유도된다.결과 키는 길이가 128-비트이다(128비트는 대부분의 암호 알고리즘에 대해 더욱 공통이다). Key∥CodeDigest를 해시(hash)하기 위한 이유는 non-Root 디바이스 인증서버가 실제의 마스터 키가 무엇인지 인식함이 없이 AppContainer를 창조하게 하기 위해서이다. 실제의 시크릿 마스터 키의 인식은 다른 AppContainer와 절충한다.
NewKey(Key,Usage)=TruncateTo128bits(SHA-1(Key∥Usage))
여기서 Usage 변수는 32-비트 값이다. NewKey()의 경우에 있어서는 결과 키를 노출시킬 필요가 없기 때문에 하싱(hashing) 및 절단(truncating)는 코드를 단순화시키는데 사용된다. 또한 NewKey()는 때때로 독립변수로서 AppKey()의 결과를 취한다.
CustomerAppKey(Key,CustomerSecret)=TruncateTo128bits(SHA-1(Key∥CustomerSecret))
여기서 CustomerSecret는 128-비트 값이다. 이 함수는 CustomerSecret 부분을 포함하는 AppContainer에 대한 키를 발생시키는데 사용된다.
AppCodeDigest=Enc160Bits(SMK,DecryptedCodeDigest) 및
DecryptedCodeDigest=Dec160Bits(SMK,AppcodeDigest)는 시크릿 마스터 키를 사용하는 160-비트 다이제스트 값을 암호화하고 복호화하는데 사용되고, 그리고 특정 디바이스상의 특정 프로그램에 대한 제 1 AppContainer를 창조하는데 포함되는 디바이스 인증서버를 필요로하는 메카니즘의 중요한 부분이다. 서버는 Enc160Bits 함수를 수행하고 그리고 클라이언트 머신은 Dec160Bits 함수를 수행한다.
Enc160Bits 함수는 이하의 단계를 수행한다. AppCodeDigest 버퍼 내의DecryptedCodeDigest를 복사한다. Key=NewKey(SMK,UsageAppCodeDigest)로 둔다. Plaintext1=AppCodeDigest의 First16bytes로 둔다. 이것은 DecryptedCodeDigest의 First16bytes이다. Ciphertext1=RC6CBCEncrypt(Key,Plaintext1)으로 둔다. 이것은 평문이 단지 한 블록의 길이이므로 ECB 모드와 등가이다.
AppCodeDigest의 First16bytes를 암호문1로 대체한다. Plaintext2=AppCodeDigest의 Last16bytes로 둔다. 이 값의 제 1의 12바이트는 암호문1의 마지막 12바이트이고 그리고 이 값의 마지막 4바이트는 DecryptedCodeDigest의 마지막 4바이트이다. Ciphertext2=RC6CBCEncrypt(Key,Plaintext2)로 둔다. 평문이 단지 한 블록의 길이이기 때문에 이것은 ECB모드와 등가이다. AppCodeDigest의 마지막 16바이트를 암호문2로 대체한다.
Dec160Bits 함수는 이하의 단계를 수행한다. AppCodeDigest가 DecryptedCodeDigest 버퍼내로 복사된다. Key=NewKey(SMK,UsageAppCodeDigest)로 둔다. Ciphertext2=DecryptedCodeDigest의 Last16bytes로 둔다. 이것은 AppCodeDigest의 마지막 16바이트이다. Plaintext2=RC6CBCDecrypt(Key,Ciphertext2)로 둔다. 암호문이 단지 한 블록의 길이이기 때문에 이것은 ECB모드와 등가이다. DecryptedCodeDigest의 마지막 16바이트를 Plaintext2로 대체한다. DecryptedCodeDigest의 마지막 4바이트는 정정된 값을 갖는다. Ciphertext1=DecryptedCodeDigest의 First16bytes로 둔다. 이것은 AppCodeDigest의 제 1의 4바이트 및 Plaintext2로부터의 제 1의 12바이트를 포함한다. Plaintext1=RC^CBCDecrypt(Key,Ciphertext1)으로 둔다. 암호문이 단지 한 블록의 길이이기 때문에 이것은 ECB모드와 등가이다. DecryptedCodeDigest의 제 1의 16바이트를 Plaintext1로 대체한다.
Enc(Key,Usage,Message)=RC6CBCEncrypt(NewKey(Key,Usage),Message)
Dec(Key,Usage,Message)=RC6CBCDecrypt(NewKey(Key,Usage),Message)
여기서 암호블록연쇄(CBC)모드에 대한 초기 벡터는 제로의 16-바이트이고, 그리고 Usage 값은 길이가 32-비트이다. 암호블록연쇄는 암호화이전에 평문의 현재의 블록과 암호문의 이전 블록을 결합하는 블록암호모드이다. 키는 길이가 128-비트 또는 288-비트일 것이다. Message변수는 길이가 16바이트의 3배인 테이타의 블록을 특정한다. RC6암호는 1998년 8월 20일 Ronald L. Rivest, M.J.B. Robshaw, R. Sidney 및 Y.L. Yin.에 의한 "The RC6TMBlock Cipher"에 정의되어 있고, 그리고 CBC모드는 1995년 NY, New York, Bruce Schneier, John Wiley & Sons에 의한 "Applied Cryptography Second Edition"에 정의되어 있다.
RC6은 NIST AES(Advanced Encryption Standard)의 필요성을 특히 충족하도록 설계되었다. RC6은 변화가능한 길이 키 사이즈에 대한 서포터를 포함하고 있고 그리고 CPUs 에서 RC5로의 진보의 장점을 갖도록 최적화되어 있다.
이러한 프리미티브(primitive)가 대부분의 컨테이너와 사용될 때, Message는 16-바이트 임의의 값(IV라 불리는)으로 시작되고, 그리고 Message가 암호(16-바이트)의 블록 사이즈의 3배가 되도록 끝에서 16바이트에 대한 하나와 패드(pad)되어있다. 이것은 다음의 평문블록과 직접적으로 XOR되지 않기 때문에, 16-바이트 IV는 종래의 CBC모드에 사용되지 않는다. 대신, 암호화하는 동안, 제로(아무것도 하지 않는)로 XOR되고 그래서 암호문의 제 1 블록을 생산하기 위해 키와 함께 암호화된다. 그래서 제 1 암호문 블록은 그 블록을 암호화하기 전에 다음의 평문 블록과 XOR된다. 복호화시, 제 1 블록은 복호화되고 본래의 임의의 IV블록을 생산하기 위해 제로(아무것도 하지 않는)로 XOR된다. 제 2 암호문 블록은 복호화되고 평문의 제 2 블록을 생산하기 위해 암호문의 제 1 블록과 XOR된다.
Enc 및 Dec의 패딩은 패드된 다수의 바이트와 같은 값을 갖는 일련의 동일한 바이트이다. 예를 들어, 패딩의 2 바이트가 부가되면, 각각의 바이트는 값0x02를 가질 것이다. 적어도 한 바이트의 패딩이 항상 존재해서, 평문이 이미 길이가 16바이트의 3배라면, 패딩의 16바이트가 부가되고 각각의 바이트는 값0x10을 가질 것이다. 임의의 것과 단정할 수 있는 패딩 바이트에 대한 격렬한(Religious wars)논의가 있었다. 이러한 설계는 단정할 수 있는 패딩 바이트를 요구한다. 복호화된 데이타의 마지막 바이트를 검사함으로써 부가된 패딩이 얼마나 많은지를 결정하기가 용이해짐을 알 수 있다.
HMAC(Key,Message)프리미티브. 기초적인 완전 프리미티브는 임의의 암호작성법의 다이제스트 함수에 기초할 수 있는 Hugo's Message Authentication Code(HMAC)라 불린다. 본 발명에 있어서, 1995년 4월 17일 NIST & NSA에 의한 "Secure Hash Standard"로 정의된 SHA-1에 기초하고 있다. HMAC 프리미티브에 근거하여 발행된 논문은 다이제스트 함수에 있어서 잠재적인 결점을 보상하는 뛰어난시큐어리티 특성을 가짐을 보여준다. SHA-1은 메세지 또는 데이타 파일의 압축된 표시를 계산하기 위한 시큐어 해시 알고리즘에 대해 미국 상무성에 의해 채택된 표준 시방서이다. 임의의 길이<2 64비트의 메세지가 입력될 때, SHA-1은 메세지 다이제스트로 불리는 160-비트 출력을 생산한다. 그래서, 메세지 다이제스트는 메세지에 대한 서명을 발생시키고 확인하는 Digital Signature Algorithm(DSA)에 입력될 수 있다. HMAC(Key,Message)=SHA-1(Key xor Opad∥SHA-1(Key xor Ipad∥Message))
Opad 및 Ipad의 값은 SHA-1의 내부 압축 함수의 블록크기와 매치시키기 위해 길이가 512-비트인 다른 상수이다. 키는 디자인에 있어서 길이가 512-비트보다 작아야 한다. Opad 및 Ipad의 값은 HMAC의 상세한 설명과 함께, H.Krawczyk, M. Bellare 및 R. Canetti에 의한 "HMAC:Keyed-Hashing for Message Authentication"에 정의되어 있다. HMAC 프리미티브는 메세지의 스트레이트(straight) 다이제스트와 비교하여 SHA1 압축함수의 2 이상의 반복을 필요로 한다. 이것은 뛰어난 시큐어리티 특성에 대해 지불하는 낮은 경비이다.
HMAC는 암호작성법 해시 함수를 사용하는 메세지 인증에 대한 메카니즘이다. HMAC는, 예를 들어, 시크릿 공유 키를 결합한 MD5, SHA-1과 같은 임의의 반복적인 암호작성법의 해시 함수와 더불어 사용될 수 있다. HMAC의 암호작성법의 강도는 근원적인 해시 함수의 특성에 의존한다.
RSA작동은 RSA로부터 허용된 코드를 사용하는 BIOS내에서 수행된다.
Ciphertext=RSAOaepEncrypt(PublicKey,OaepSeed,Message)
Message=RSAOaepDecrypt(PrivateKey,Ciphertext)
이러한 프리미티브는 RSA알고리즘을 사용하는 암호작성 및 복호화를 수행한다. 암호작성 프리미티브에 대해, Message는 RSA Laboratories에 의한 "PKCS#1 v2.0:RSA Cryptography Standard"에 정의된 OAEP(최상의 비대칭 암호작성 패딩)를 사용하여 우선 패드되고, 그리고 PublicKey에 따라 지수화되고 모드가 감소하게 된다. OAEP에 의해 요구되는 임의의 시드 값은 이 함수에 대한 변수로서 패스된다. 복호화 프리미티브에 대해, OAEP 패딩은 암호문이 PrivateKey에 따라 지수화되고 모드가 감소한 후에 확인되고 제거된다. 대부분의 경우에 있어서, Message는 128-비트 키 및 160-비트 SMK KID의 연속이다.
PKCS는 2진수 및 ASCII데이타에 대해 설계되고; PKCS는 또한 ITU-T X.509 표준과 함께 양립할 수 있다. 공인된 표준은 PKCS #1,#3,#5,#7,#8,#9,#10,#11 및 #12이고; PKCS #13 및 #14는 현재 개발중이다. PKCS는 알고리즘 특성 및 알고리즘-독립 실행 표준 모두를 포함한다. 많은 알고리즘은 지지되고, RSA(및 Diffie-Hellman 키 교환)을 포함하지만, 단지 후자의 두 개만이 특히 상세히 설명되었다. PKCS는 또한 디지탈 서명, 디지탈 감추기(envelopes), 및 광버위한 인증에 대한 알고리즘-독립 신택스(syntax)를 정의하고; 이것은 어떤 사람에게 권한이 주어진 임의의 암호작성법 알고리즘이 표준 신택스에 무엇인가 확인하게 해서, 정보처리상호운용이 달성된다. PKCS 표준을 상세히 설명하는 문서는 RSA Data Security's FTP서버(http://www.rsa.com 또는 익명의 ftp to ftp.rsa.com을 통해 또는 pkcs@rsa.com으로 메일을 보냄으로서 접속될 수 있는)에서 얻어진다.
다음은 Public-key 암호작성법 표준(PKCS)이다:
PKCS#1은 RSA 공개 키 암호사용법을 사용하는 암호작성 및 승인 데이타에 대한 메카니즘을 정의한다.
PKCS#3은 Diffie-Hellman 키 동의 프로토콜을 정의한다.
PKCS#5는 패스워드로부터 유도된 시크릿 키를 갖는 문자열을 암호화하는 방법을 설명한다.
PKCS#6은 X.509의 버젼3을 위해 단계적으로 제거된다.
PKCS#7은 디지탈 서명 및 암호화와 같은 암호작성법의 향상을 포함하는 메세지에 대한 일반적인 신택스를 정의한다.
PKCS#8은 비밀 키 정보에 대한 포맷을 설명한다. 이 정보는 일부의 공개 키 알고리즘에 대한 비밀 키를 포함하고, 그리고 선택적으로 부속물의 셋을 포함한다.
PKCS#9는 다른 PKCS표준에 있어서 사용을 위해 선택된 부속물 타입을 정의한다.
PKCS#10은 인증대 요청에 대한 신택스를 설명한다.
PKCS#11은 스마트 카드 및 PCMCIA카드와 같은 암호작성법의 디바이스에 대해서, Cryptoki라 불리는 테크놀로지-독립 프로그래밍 인터페이스를 정의한다.
PKCS#12는 사용자의 비밀 키, 인증, 여러가지 시크릿등을 기억 또는 운송하기 위한 휴대할 수 있는 포맷을 특정한다.
PKCS#13은 Elliptic Curve Cryptography를 사용하는 암호화 및 승인 데이타에 대한 메카니즘을 정의한다.
PKCS#14는 허위의-임의의 수 발생에 대한 표준을 제공한다.
SigBlock=RSASigEncrypt(PrivateKey,Digest)및 Digest=RSASigDecrypt(PublicKey,SigBlock) 프리미티브는 RSA알고리즘을 사용하는 암호화 및 복호화를 수행한다. 암호화 프리미티브에 대해, 160-비트 SHA-1 다이제스트 값은 "PKCS#! v2.0:RSA Cryptography Standard"로 정의되는 서명 패딩을 사용하여 우선 패드되고 그리고 PublicKey에 따라 지수화되고 모드가 감소한다. 복호화 프리미티브에 대해, 패딩은 암호문이 PublicKey에 따라 지수화되고 모드가 감소한 후에 확이되고 제거된다. 패딩은 다이제스트 알고리즘의 동일성을 암호로 바꿔쓰고 그리고 이러한 프리미티브는 단지 SHA1 알고리즘을 지지한다. 이러한 프리미티브는 디지탈 서명을 창조하고 확인하기 위한 과정의 일부분이다. 다른 단계는 승인된 데이타의 실제 SHA1 다이제스트를 계산하는 것 또는 확인하는 것을 포함한다.
AppCodeDigest는 컨테이너를 소유하는 애플리케이션을 식별하기 위해 사용되는 데이터이다. 이것은 모든 컨테이너에 적용되는 것은 아니다. 이 데이터는 암호화 함수를 불러내는 코드에 근거하여 발생된다. 통상적으로 이 데이터는 디바이스 인증에 의해 발생, 암호화 및 승인된다. 대개 복호화된 AppCodeDigest(ACD)는 BIOS에 의한 실행시에 CallerCodeDigest와 비교된다. 서버 소유의 Codedigest는 항상 0이다.
SealerCodeDigest/CallerCodeDigest는 함수의 caller에 근거하는 함수에서 계산된 데이터이다. 이 다이제스트를 계산하기 위해 사용되는 정보는, 컨테이너opcode로서 OpaacOsdAuthorization를 사용하는 SignedContainer에 있어서, BIOS에 대한 등록, 오포레이팅 시스템 드라이버에 대한 등록과 같은 등록 동안 제공된다.
가입은 클라이언트 시스템이 경험하는 초기 스테이지이다. 이 스테이지 동안 클라이언트 시스템과 디바이스 인증 서버 사이에서 마스터 키가 생성되고 교환된다. 이 단계는 PubKContainer를 포함한다. 가입 프로세스가 마스터 키를 할당하지 않은 경우, 트루 마스터 키가 임시 랜덤 값을 대체할 때까지 마스터 키는 임시 랜덤 값으로 대체된다.
BIOS와 오퍼레이팅 시스템 드라이버(operating system driver:OSD)는 컨테이너 오퍼레이션에 참여한다. 밀봉과 관련된 컨테이너 함수는 OSDAppContainer(), OSDMKContainer(), OSDPubKContainerSeal(), 및 BIOSAppContainerSeal()을 포함한다.
OSDPubKContainerSeal() 함수는 AppContainer 내부의 caller로 복귀시키는 랜덤 세션 키(마스터 키)를 생성한다. 그리고 나서, AppContainer는 다른 MKContainer() 오퍼레이션을 불러내기 위해 사용된다. 도__는 한 예시적인 PubKContainer 알고리즘을 도시한다.
개봉과 관련된 Container 함수는 OSDAppContainerUnseal(), OSDMKContainerUnseal(), OSDSignedContainerUnseal(), OSDPubKContainerUnseal(), 및 BIOSAppContainerUnseal()을 포함한다.
이제 컨테이너 클래스 실행의 세부적인 내용을 설명한다. 이 클래스는 PubkContainer 및 MKContainer를 포함한다.
이하는 PubKContainer의 포맷과 밀봉 및 개봉에 사용되는 클래스에 있어서의 방법의 설명이다. 이 컨테이너는 클라이언트와 디바이스 인증 서버 사이의 안전한 통신 채널을 셋업하기 위해 주로 사용된다. PubKContainer의 제 2 파트는 4 바이트 헤더를 포함하는 완전한 MKContainer object이다. PubKContainer의 제 1 파트는 발생한 마스터 키(MK)와 클라이언트 키 ID(clien's Key ID:KID)의 값, (또는 마스터키가 할당되지 않은 경우 0의 값)을 포함하고, 두 값은 리시피언트의 공개 키로 암호화된다.
PubKContainer의 포맷은 제 1 파트를 변화시키지 않으면서 이 컨테이너의 제 2 파트를 변화시키는 것을 허용하도록 신중하게 선택된다. 이것은 클라이언트와 서버가 중요한 성능 향상을 행하는 것을 허용한다. OSD 밀봉 함수는 AppContainer에 싸여 있는 발생된 마스터키를 복귀시킨다. 클라이언트는 (예컨대 새로운 다운로드를 페치하기 위해) 서버에 새로운 연결을 시작할 때마다 마스터 키 및 PubKContainer의 제 1 파트를 기억하여 재사용할 수 있고 제 2 파트는 이 세션을 암호화하는 마스터키를 포함하는 MKContainer이다. 이것은, 단지 리얼 서버만이 (새로운 세션 키를 복호화하기 위해 필요한) 세이브된 마스터 키를 알고 있고 또는 제 1 파트를 읽는 비밀 키를 알고 있기 때문에, SMI 루틴으로 공개 키 오퍼레이션을 수행할 필요를 없애 주고 더구나 보안상의 이익을 얻게 한다. 서버에 대한 중요한 최적화는 서버가 PubKContainer의 제 1 파트 밖으로 추출하는 마스터 키를 캐시하는 것이고, 제 1 파트의 해시(hash)에 의해 그 캐시된 값을 인덱스하는 것이다. 이 캐시는 PubKContainer의 제 1 파트가 재사용되는 경우 비밀 키 오퍼레이션을 수행할 필요를 없애 준다. 서버는 클라이언트가 항상 전체 제 1 파트를 전송하기 때문에 캐시 엔트리를 임의의 때에 플러시할 수 있고 그래서 서버는 마스터 키를 추출하기 위해 비밀 키를 항상 사용할 수 있다는 사실을 주목하라. 또한 이것은 클라이언트 및 서버 사이에서 메시지를 초기화하기 위해 단지 하나의 포맷이 존재하고, 마스터키를 재사용하거나 발생시키는 것을 처리하는데 2개의 별개의 포맷이 존재하는 것이 아니라는 것을 의미한다.
PubKContainer는 시크릿 마스터 키의 셋업을 허용하는 가입 동안 클라이언트 및 서버 사이의 트랜스미션을 셋업하고, 일부 클라이언트 애플리케이션 및 디바이스 인증 서버 사이의 트랜스미션을 셋업하기 위해 사용된다. 테이블 6은 최종적으로 밀봉된 PubKContainer 구조를 도시한다.
PubKContainer와 관련된 컨스트럭터 및 방법은 이하와 같다.
public PubkContainer()는 logger object를 초기화하는 빈 container이다. public PubkContainer(InputStream in)에 관해서는, 컨테이너는 input stream으로 초기화되고 그리고 나서 이 input stream은 바이트 어레이로서 버퍼 내로 읽혀진다. 그리고 나서, 버퍼는 parseBuffer 방법을 사용하여 분석된다. 또한 logger object도 초기화된다.
public PubkContainer(byte[]buf).
컨테이너는 바이트 어레이로 초기화되고 그리고 나서 이 바이트 어레이는 바이트 어레이로서 버퍼 내로 읽혀진다. 그리고 나서 이 버퍼는 parseBuffer 방법을 사용하여 분석된다. 또한 logger object도 초기화된다. private void seal()은RsaLibException를 내놓는다. 이하는 PubKContainer: opocode, KID, PubkDigest, Sealed MKContainer를 밀봉하기 위해 세트된다. 포맷을 3=FmtPubKContainer로 세트하라. opcode, 포맷, reserved, KID 및 MK로 PubkBlock를 구축하라. opcode, KID 및 마스터키는 caller에 의해 세트된다. 암호화된 PubKRSBlock를 구축하도록 try block에 있는 RSA lib를 위한 JNI wrapper, rsaOaepEncrypt(PubKDDigest, PubKBlock)를 호출하라. sealed MKContainer(MkC) + 148 (128-PubKRSABlock, 20-PubKDigest)길이로 길이를 세트하라. 이 길이는 sealed MKContainer를 포함하는 PubKDigest로부터 바이트의 카운트를 나타낸다. opcode∥format∥reserved∥length∥PubkDigest∥PubKRSABlock∥sealedMkC와 같은 바이트 어레이로서 sealed PubkContainer를 구축하라. 연결 어레이를 구축하도록 보안 유틸리티로부터 addArray 방법을 이용하라.
private void unseal()은 RsaLibException, ContainerException을 내놓는다.
invalidOpcode, invalidFormat 또는 invalidLen이 오류인지를 체크하고 ContainerExeption을 내놓아라. 이것들은 그들 중 어떤 것이 기대한 바와 다르다면 parseBuffer에 false로 세트된다.
해독에 의해, opcode∥format∥reserved∥KID∥MK인 PubKBlock을 획득하라.
RSA lib를 위한 JNI wrapper를 통해 rsaOaepDecrpyt(PubKDigest, PubKRSABlock)를 가진 PubKRSABlock을 획득하라.
PubKBlock, opcode, 포맷, KID 및 마스터 키에 따라 유효성(validity) 및 길이 체크를 수행하라.
private void parseBuffer(byte[]buffer)는 opcode∥format∥reserved∥length∥PubkDigest∥PubKRSABlock∥sealed MKC인 버퍼에 축적된 incoming sealed container를 분석하는 헬퍼(helper) 함수이다.
기대한 바와 다르다면 invalidOpcode, invalidFormat, invalidLen을 세트하라.
public byte[]getRawForNet()는 ContainerException을 내놓는다.
데이터 및 MKDigest가 0이 아닌지를 체크하고 그리고 나서 밀봉 방법을 호출하라.
opcode∥format∥reserved∥length∥PubkDigest∥PubKRSABlock∥sealed MKC로서 밀봉 오퍼레이션에 구축된 버퍼를 복귀시켜라.
public byte getOpcode()는 컨테이너의 opcode를 복귀시킨다.
public byte[] getPubKDigest()는 컨테이너로부터 PubKDigest를 복귀시킨다.
public byte[] getKID()는 필요하다면 개봉하여 컨테이너로부터 KID를 복귀시킨다.
public byte[] getMK()는 ContainerException을 내놓고
필요하다면 개봉하여 컨테이너로부터 MK를 복귀시킨다.
public MkContainer getMkContainer()는 ContainerException을 내놓고-parseBuffer에 의해 행해진 Pubk에 간직된 sealed MK 컨테이너를 추출하고; MK를 획득하기 위해 Pubk 파트를 개봉하고 MK 컨테이너를 위해 그것을 세트한다.
public void setOpcode(byte Opcode)는 ContainerException을 내놓고-유효한범위에 있다면 체크한 후 컨테이너를 위해 opcode를 할당한다.
public void setPubKDigest(byte[] digest)는 ContainerException을 내놓고-0이 통과되지 않거나 길이가 20과 같지 않다면 exception을 내놓고, PubKDigest를 세트한다.
public void setKID(byte[] Kid)는 ContainerException을 내놓고-0이 통과되지 않거나 길이가 20과 같지 않다면 exception을 내놓고, Key ID를 세트한다.
public void setMK(byte[] Mk)는 ContainerException을 내놓고-0이 통과되지 않거나 길이가 16과 같지 않다면 exception을 내놓고, MK를 세트한다.
public void setMKContainer(byte[] Mkc)는 ContainerException을 내놓고-PubKContainer에 간직되게 하기 위해 밀봉된 MkContainer를 세트한다.
private void log(int aWarningLevel, String message)-현재의 것과 파라미터로서 통과된 경고 레벨을 비교하고, 보다 긴급하다면 그것을 출력한다.
MKContainer와 관련된 컨스트럭터 및 방법은 이하와 같다.
이제 MKContainer의 포맷과 그것을 생성하는데 사용되는 알고리즘을 설명한다. 우선, 개봉 포맷을 설명하고 그리고 나서 그것을 밀봉 및 개봉하는 단계를 설명한다. MKContainer는 클라이언트와 서버가 PubKContainer를 이용하여 공통 마스터키를 셋업한 후 그들 사이에서 전송된 아주 큰 정보(최대 64K)를 보호하는데 주로 사용된다.
MKContainer는 데이터를 암호화하는데 주로 이용된다. 암호화는 대칭 키 암호화에 근거한다. 이 키는 마스터 키로부터 유래한다. MKContainer는 마스터 키로브터 유래한 대칭 키를 이용하여 아주 큰 데이터(최대 64K)를 암호화하는데 사용된다. 특별한 경우의 용도는 시크릿 마스터 키의 셋업을 허용하는 가입 동안 클라이언트 및 서버 사이의 트랜스미션을 암호화하고, 일부 클라이언트 애플리케이션 및 디바이스 인증 서버 사이의 트랜스미션을 암호화하는 것이다. 최종 밀봉 구조가 테이블 13에 도시된다.
public MkContainer()는 logger object를 단지 초기화만 하는 빈 컨테이너이다.
public MkContainer(InputStream in)-이 컨테이너는 input stream으로 초기화되고 그리고 나서 바이트 어레이로 버퍼 내로 읽혀지고, 그리고 나서 버퍼는 parseBuffer 방법을 사용하여 분석된다. 또한 logger object도 초기화된다.
public MkContainer(byte[]buf)-이 컨테이너는 바이트 어레이로 초기화되고 그리고 나서 바이트 어레이로 버퍼 내로 읽혀지고, 그리고 나서 버퍼는 parseBuffer 방법을 사용하여 분석된다. 또한 logger object도 초기화된다.
private void seal()은 RsaLibException을 내놓는다.
이하는 MKContainer를 밀봉하고, 이런 opcode, MKDigest, 데이터에 기초한 세트 방법을 호출하는 세트이다.
포맷을 3=FmtPubKContainer로 세트하라.
scd를 20바이트 어레이의 0으로 세트하라.
데이터 길이 +56(20-MKDigest+16-iv+20-scd)로 길이를 구성하라.
길이를 2바이트 어레이로 변환하라.
랜덤 넘버 제너레이터로부터 16바이트 어레이로 iv를 획득하고, cryptoPrimitives generateRandomNumber(16) 방법을 호출하라.
opcode∥format∥reserved∥length∥MKDigest∥iv∥scd∥data와 같이 보안 유틸리티의 addToArray 방법을 이용하여 payload를 구축하라;
NKeyForSealing=CryptoPrimitive.newKey(MKDigest,ctnrConstants.UsageMKMacServer)로서 newKey를 구성하라.
그리고 나서 Mac는 Mac=CryptoPrimitive.getHmac(NKeyForSealing,payload)로서 cryptoPrimitive call로부터 얻어진다;
가변의 Plaintext를 길이가 병렬의 16바이트로 되도록 padding을 1 내지 16 바이트의 벡터로 세트하라. 각 padding 바이트는 벡터 내의 padding의 수와 같은 값을 가지고 있다. 이것은 SecurityUtils class 내의 adjustPad법을 사용하여 행해진다.
padding을 Plaintext에 추가하고 이제 Plaintext는 iv∥SealersCodeDigest∥Data∥Mac∥Padding 이다.
Ciphertext=Enc(Key, UsageMKEnc, Plaintext)로 하자. Ciphertext의 길이는 Plaintext의 길이와 동일하다.
Plaintext plus 20의 바이트의 수로 길이를 세트하고, 그 값을 2바이트 어레이로 기억하라.
opcode∥format∥reserved∥length∥MKDigest∥ciphertext로 버퍼로서 밀봉된 MKContainer를 구성하라.
private void unseal()은 RsaLibException, ContainerException을 내놓는다. invalidOpcode, invalidFormat 또는 invalidLen이 false인지를 체크하고 ContainerException을 내놓아라. 이것들은 그것들 중 어떤 것이 기대한 바와 다르다면 parseBuffer 내에 false로 세트된다. parseBuffer로부터 추출된 ciphertext는 CryptoPrimitive,decrypt 방법으로 통과하고 해독된 plaintext를 얻는다. dec 방법은 dec(MKDigest,ctnrConstants. UsageMKEncServer,ciphertext)로 불려진다.
plaintext의 마지막 바이트로부터 pad 바이트를 알 수 있고 그것은 얼마나 많은 패드 바이트가 추가되었는지를 주기 때문에 패드 바이트는 plaintext로부터 제거되고, 데이터 크기는 mac 길이와 plaintext의 길이로부터 패드 바이트의 수를 제거함으로써 계산된다.
iv, scd 및 데이터의 길이는 계산되어 2바이트 어레이로 기억된다. 데이터의 길이는 계산되고 iv, scd 및 mac의 길이는 미리 정해져 있기 때문에, 이 모든 것은 plaintext로부터 추출된다.
Length=Length 마이너스 20 마이너스 패딩의 길이를 변경하라.
opcode∥format∥reserved∥length∥MKDigest∥iv∥scd∥data로서 payload를 구축하라. NKeyForSealing=CryptoPrimitive.newKey(MKDigest,ctnrConstants.UsageMKMacServer)으로서 newKey를 구성하라;
그리고 나서 ExpectedMac가 expectedMac = CryptoPrimitive.getHmac(NKeyForSealing,payload)로서 cryptoPrimitive call로부터 얻어진다.
mac 및 expectedMac이 동일하지 않으면 ContainerException을 내놓아라.
private void parseBuffer(byte[]buffer)는 opcode∥format∥reserved∥length∥MKDigest∥cipherText인 버퍼 내에 기억된 인커밍 밀봉 컨테이너를 분석하는 헬퍼 함수이다.
해독된 텍스트는 암호화된 형태로 ∥IV∥SealersCodeDigest∥Data로 이루어진다.
기대한 바와 같지 않으면 invalidOpcode, invalidFormat, invalidLen을 세트하라.
public byte[]getRawForNet()throws ContainerException은 Key ID, MK 및 밀봉된 MkC(MkBuff)가 0이 아닌지를 체크하고 그리고 나서 밀봉 방법을 호출한다.
그것은 Opcode∥Format∥Length∥MKDigest∥IV∥SealersCodeDigest∥Data∥mac∥pad로서 밀봉 오퍼레이션 내에 구축된 버퍼를 복귀시킨다.
public byte getOpcode()는 컨테이너의 opcode를 복귀시킨다.
public byte[] getMKDigest()throws ContainerException은 컨테이너로부터 MKDigest를 복귀시킨다.
public byte[] getData()throws ContainerException은 필요하다면 개봉하여 컨테이너로부터 데이터를 복귀시킨다.
public byte[] getMK()throws ContainerException은 컨테이너로부터 MK를 복귀시킨다.
public void setOpcode(byte Opcode)throws ContainerException은 유효한 범위에 있다면 체크한 후 컨테이너를 위해 opcode를 할당한다.
public void setMKDigest(byte[] digest)throws ContainerException은 0이 통과되지 않거나 길이가 20과 같지 않다면 exception을 내놓고, MKDigest를 세트한다.
public void setData(byte[] Kid)throws ContainerException은 0이 통과되지 않으면 exception을 내놓고, 데이터를 세트한다.
public void setMK(byte[] MK)throws ContainerException은 0이 통과되지 않거나 길이가 16과 같지 않다면 exception을 내놓고, MK를 세트한다.
private void log(int aWarningLevel, String message)는 현재의 것과 파라미터로서 통과된 경고 레벨을 비교하고, 보다 긴급하다면 그것을 출력한다.
이제 OSD 소프트웨어를 설명한다. 오퍼레이팅 시스템 드라이버(OSD)는 시스템(10)의 핵심 구성요소의 하나이다. 시스템 내로 동적으로 로드된 것은 커널 모드 드라이브이다. 그 상부 에지는 보안 애플리케이션에 보안 서비스를 제공한다. 그 하부 에지는 저레벨 보안 기능성을 제공하는 보안 BIOS와 인터페이스한다. 오퍼레이팅 시스템이 제공하는 서비스는 RSA 및 RC6 암호화 함수, 애플리케이션 보전 체킹 및 랜덤 넘버 제너레이팅을 포함한다.
소프트웨어 오퍼레이팅 환경은 WDM 윈도우즈 디바이스 드라이버와 같은 오퍼레이팅 시스템 드라이버를 채용한다. 또한 이 디바이스 드라이버는 윈도우즈 98,윈도우즈 ME, 윈도우즈 2000 및 이후 마이크로소프트 윈도우즈 오퍼레이팅 시스템 하에서 작동한다.
이제 작동 이론을 설명하고 OSD 오퍼레이션의 절차를 개략한다. 도 2는 클라이언트 구성요소 하이어라키를 도시한다.
이제 초기화를 설명한다. 애플리케이션이 OSD 함수를 호출하기 전에, OsdRegisterApplication 함수를 호출하여 오퍼레이팅 시스템 드라이버에 그 자신을 등록한다. 오퍼레이팅 시스템 드라이버는 애플리케이션을 등록하기 위해 이하를 수행한다. 프로세스 ID와 같은 애플리케이션 식별 정보를 획득하라.
파라미터로서 통과된 SignedContainer의 키 다이제스트에 근거하여 공개 키 인덱스를 획득하라. 초기화 동안 오퍼레이팅 시스템 드라이버가 생성하는 키 테이블은 키 다이제스트를 키 인덱스에 덮어씌운다. SignedContainer에서 데이터 블록을 개봉하도록 BIOSSRawRSAPublic 루틴을 호출하라. 이 데이터 블록은 어드레스 범위, 기대되는 코드 다이제스트 및 PriviledgeBitVector 및 보전 체킹의 주파수를 포함한다.
어드레스 범위에 근거하여 호출 애플리케이션의 부분의 코드 다이제스트를 생성하라. 애플리케이션이 수행되어 모든 OSD 함수 불러냄이 함께 폐쇄되고, 이것은 OSD 서비스 인보케이션 블록(SIB)로 여겨진다.
OSD 서비스 인보케이션 블록은 다른 애플리케이션이 SIB 내로 점프하는 것을 방지하고 그 자신의 목적으로 OSD의 API를 이용하도록 (법적으로 요구되는) 일반적이지 않아야 한다. 이 SIB는 호출 애플리케이션에 특정적인 일련의 값 추가 API이다.
생성된 코드 다이제스트 및 기대된 코드 다이제스트를 비교하라. 이들이 같으면 이 애플리케이션은 인증되고 그렇지 않으면 에러를 복귀시킨다. 애플리케이션이 인증되면 등록된 애플리케이션 테이블에 엔트리를 추가하라. 이 엔트리는 애플리케이션의 식별 정보(프로세스 ID), OSD 서비스 인보케이션 블록의 어드레스 범위 및 PriviledgeBitVector 및 보전 체킹 주파수를 포함한다.
이제 서비스 호출이 논의될 것이다. 애플리케이션은 운영 시스템 드라이버에 대하여 등록된 이후에 OSD 서비스를 요청할 수 있다. 운영 시스템 드라이버는 그 함수가 호출될 때마다 아래와 같이 작동한다.
애플리케이션의 완전성을 체크한다. 등록된 애플리케이션 테이블로부터 완전성을 체크하는 빈도에 근거한다. 운영 시스템 드라이버는 애플리케이션의 OSD 서비스 호출 블럭의 코드 다이제스트를 생성함에 의해서 이것을 실행한다. 그 다음에 예상되는 코드 다이제스트와 비교된다. 만약 이들이 동일하다면 애플리케이션 완전성은 OK 이다.
애플리케이션이 특별히 이 함수를 호출하기 위한 인증을 가지고 있는지를 알기 위하여 특정 비트 벡터를 체크한다. 이 요청을 따르기 위하여 OSD 코드 실행을 계속한다. 운영 시스템 드라이버는 요청된 서비스에 의존하여 시큐러티(security) BIOS를 호출할 수 있다. OsdRandomAddNoise 함수를 호출한다. 이것은 PRNG의 비예측성을 증가시킨다.
이제 애플리케이션 등록해제가 논의될 것이다. 애플리케이션을 종료하기 전에, 이것은 운영 시스템 드라이버에 대하여 등록해제하도록 OsdUnregisterApplication 을 호출한다. OSD 드라이버는 등록된 애플리케이션 테이블에서 애플리케이션의 엔트리를 제거한다.
아래의 내용은 운영 시스템 드라이버(OSD) 함수의 상세한 설명이다. 운영 시스템 드라이버는 Windows 98, windows ME 및 Windows 2000 에서 작동할 수 있는 WDM kernel mode driver이다. WDM 은 전원관리와 PNP 를 위한 부가적인 지원을 가지고 있는 Windows NT-layered 32 비트 디바이스 드라이버 모델에 기초한 것이다. 운영 시스템 드라이버가 어떠한 물리적인 디바이드도 관리하지 않기 때문에, 어떠한 하드웨어 자원도 할당되지 않을 것이다. 운영 시스템 드라이버는 하나의 모듈로서 실행된다. 여기에는 어떠한 class/mini class 드라이버 쌍도 없다. 운영 시스템 드라이버가 시스템내로 로드될 때, Functional Device Object(FDO)가 생성된다. 도 3은 운영 시스템 드라이버 구성요소 상호작용을 나타낸다.
이제 등록된 애플리케이션 테이블 생성이 논의될 것이다. 운영 시스템 드라이버는 등록된 애플리케이션의 테이블을 유지한다. 등록된 애플리케이션 테이블로부터 애플리케이션의 체크 빈도에 근거하여, 운영 시스템 드라이버는 호출자(caller's)의 완전성을 주기적으로 체크한다. 이것은 호출자의 OSD 서비스 호출 블럭의 어드레스 범위를 구하며 코드 다이제스트를 생성한다. 그 다음에 등록된 애플리케이션 테이블로부터 예상되는 코드 다이제스트를 다시 체크한다.
이제 RSA 암호화 함수가 논의될 것이다. 운영 시스템 드라이버는 PubKContainer 밀봉(하지만 PubK Container가 BIOS에 생성되는 가입을 위한 것은아니다), AppContainer 밀봉/개봉 및 SignedContainer 개봉을 하도록 인터페이스 함수를 실행한다. 하지만, 모든 RSA 공개/비밀 키 알고리즘은 시큐러티 BIOS에서 실행된다. 운영 시스템 드라이버는 컨테이너 작동을 달성하도록 BIOS 루틴을 호출한다.
운영 시스템 드라이버는 MKContainer 를 밀봉/개봉 하기 위하여 RC6 알고리즘 함수를 실행한다. BIOS가 마스터 키를 보호하기 위하여 MKContainer 처리를 실행하는 가입 동안을 제외하고, 이것은 BIOS 대신에 운영 시스템 드라이버 자체에서 실행된다.
이제 OSD 인터페이스 및 APIs 가 논의될 것이다.
이 절은 시스템 kernel 에 대한 운영 시스템 드라이버의 인터페이스, 시큐러티 BIOS에 대한 인터페이스를 설명한다. 또한 이 절은 사용자 모드 애플리케이션이 OSD 시큐러티 서비스를 획득하도록 호출할 수 있는 OSD API 함수를 정의한다. 또한 여기에 설명된 것은 운영 시스템 드라이버가 실행하여야 하는 내부적인 함수가다.
운영 시스템 드라이버의 상부 에지 인터페이스는 아래와 같이 작용한다. WDM 모델에서, 시스템 I/O 관리자는 I/O 요청 패킷(IRP)을 생성하고 이것을 디바이스 드라이버로 내려 보냄으로써 디바이스 드라이버에 I/O 요청을 한다. OSD 시큐러티 서비스는 DEVICE_IO_CONTROL IRP를 보냄으로써 호출될 수 있다. 디바이스 _IO_Control mode 를 위한 각각의 처리기(handler) 루틴은 특정 함수를 제공한다. 운영 시스템 드라이버 IO_CONTROL 모드는 아래에서 정의된다.
IOCTL_OSD_REGISTER_APPLICATION. 이 처리기 루틴은 운영 시스템 드라이버에 대하여 애플리케이션을 등록하고 BIOS 루틴을 호출한다.
IOCTL_OSD_UNREGISTER_APPLICATION. 이 처리기 루틴은 운영 시스템 드라이버에 대하여 애플리케이션을 등록해제한다.
IOCTL_OSD_GET_PUBLIC_KEY. 이 처리기 루틴은 파라미터로서 키 인덱스를 사용하는 BIOS 로부터 공개키를 가져오고 BIOS 루틴을 호출한다.
IOCTL_OSD_VERIFY_SIGNED_DIGEST. 이 처리기 루틴은 데이터 블럭의 RAS 디지탈 서명을 확인한다.
IOCTL_OSD_RANDOM_GENERATE. 이 처리기는 임의의 숫자를 생성하도록 PRNG 를 사용한다. 이 처리기는 PRNG 실행에 의존하여 BIOS 루틴을 호출하거나 또는 호출하지 않을 수 있다.
IOCTL_OSD_PUBK_CONTAINER_SEAL. 이 처리기는 키 인덱스로 특정되는 공개키를 사용하는 컨테이너안의 데이터 블럭을 암호화하고 BIOS 루틴을 호출한다.
IOCTL_OSD_SIGNED_CONTAINER_UNSEAL. 이 처리기 루틴은 컨테이너가 인증 서버에 의해 실제로 승인되었는지 확인하고 BIOS 루틴을 호출한다.
IOCTL_OSD_APP_CONTAINER_SEAL. 이 처리기 루틴은 마스터 키로부터 유래하는 키로 AppContainer를 밀봉하고 BIOS 루틴을 호출한다.
IOCTL_OSD_APP_CONTAINER_UNSEAL. 이 처리기 루틴은 마스터 키로부터 유래하는 키로 App Container를 개봉하고 BIOS 루틴을 호출한다.
IOCTL_OSD_APP_CONTAINER_TRANSFER. 이 처리기 루틴은 동일한 플랫폼 또는상이한 플랫폼상에서 실행하는 다른 프로그램에 의해서만 개봉될 수 있는 AppContainer를 밀봉한다. 인증 정보를 포함하고 있는 SignedContainer 를 개봉하도록 BIOS 루틴을 호출한다.
IOCTL_OSD_MK_CONTAINER_SEAL. 이 처리기 루틴은 마스터 키로 컨테이너를 밀봉한다. 실제적인 밀봉은 운영 시스템 드라이버 내부에서 행해진다. 마스터 키를 얻기 위하여 AppContainer 를 개봉하도록 BIOS 루틴을 호출한다.
IOCTL_OSD_MK_CONTAINER_UNSEAL. 이 처리기 루틴은 마스터 키로 컨테이너를 개봉한다. 개봉은 운영 시스템 드라이버 내부에서 행해진다. BIOS 루틴은 마스터 키를 얻기 위하여 App Container로 호출된다.
IOCTL_OSD_ENROLL_GENERATE_REQUEST. 이 처리기 루틴은 의사(pseudo) SMK, 메시지 키 및 SMK 클라이언트 시드(seed)를 발생시키도록 BIOS 루틴을 호출한다.
IOCTL_OSD_ENROLL_PROCESS_RESPONSE. 이 처리기 루틴은 플랫폼을 위한 마스터 키를 발생시키도록 BIOS 루틴을 호출한다.
IOCTL_OSD_INVALIDATE_SMK. 이 처리기 루틴은 앞선 기재에 의해 발생된 마스터 키를 무효화하도록 BIOS 함수를 호출한다.
IOCTL_OSD_SET_PUBLIC_KEY. 이 처리기는 BIOS 키 테이블에 여분의(extra) RSA 공개키를 설치한다.
이제 운영 시스템 드라이버의 하부 에지 인터페이스가 논의될 것이다. 운영 시스템 드라이버의 하부 에지 인터페이스상에서, 운영 시스템 드라이버는 낮은 레벨의 BIOS 에 의해 제공된 시큐러티 서비스를 얻기 위하여 시큐러티 BIOS 인터페이스를 호출한다. 시큐러티 BIOS 인터페이스는 32비트 디렉토리 서비스 인터페이스에 근거하여 실행될 것이다. 함수 인덱스는 시큐러티 BIOS 가 제공하는 모든 서비스를 위해 정의되어야 한다. 운영 시스템 드라이버가 시스템내로 로드될 때, 시큐러티 BIOS 엔트리 포인트를 탐색하는 것을 필요로 한다. 각각의 루틴을 호출하기 전에, 운영 시스템 드라이버는 시큐러티 BIOS 사양(specification)에 근거한 등록 상황(register context)을 설정하는 것을 필요로 한다.
이제 사용자 모드 API 함수가 논의될 것이다. 사용자 모드 API 라이브러리가 실행된다. 시큐러티 애플리케이션은 이 라이브러리에서 함수를 호출함에 의해서 운영 시스템 드라이버가 제공하는 시큐러티 서비스에 액세스할 수 있다. API 함수은 아래에 기술된다.
int OsdRegisterApplication(
IN unsigned char*p Authorization Buffer,
IN unsigned int*pAuthorizationBufferLength)
이 함수는 OSD 코드로 애플리케이션을 등록한다. 이것은 애플리케이션이 인증되었느지를 확인하고 OSD 를 유지하는 등록된 애플리케이션 테이블에 애플리케이션 정보를 기억한다. 다른 OSD 호출은 이들이 등록된 애플리케이션내의 위치(location)로부터 또는 다른 OSD 함수로부터 호출되는 경우에만 작동한다. 이것은 만약 등록이 성공적이라면 제로(zero)를 리턴한다. 그렇지 않은 경우에 이것은 에러를 리턴한다. pAuthorizationBuffer 와 pAuthorizationBufferLength 파라미터는 디바이스 인증 서버에 의해 생성된 SignedContainer의 길이와 위치를 지정한다.
이 함수는 OSD 서비스를 호출하기 위하여 IOCTL_OSD_REGISTER_APPLICATION 을 사용한다.
int OsdGetCapabilities(
OUT unsigned short*pVersion,
OUT unsigned short*pCapabilities)
이 함수는 OSD 버젼 숫자와 OSD CR capabilities 와 시스템 상태를 리턴한다.
버젼 숫자는 아래와 같이 정의된다.
First bite Second byte
Minor versionMajor version
이 Capabilities WORD 는 15 비트를 가진 것으로 정의된다. 비트 0 은 시스템이 이미 성공적으로 가입되었음을 가리킨다. 1 성공, 0 실패, 비트 1 은 가입 타입을 가리킨다. 0 오프라인 가입, 1 온라인 가입 그리고 비트 2-15는 예비로 남겨진다.
이 함수는 OSD 서비스를 호출하기 위하여 IOCTL_OSD_GET_CAPABILITIES 를 사용한다.
int OsdUnregisterApplication () 함수는 등록된 애플리케이션 테이블로부터 호출자의 엔트리를 제거함으로써 호출자를 등록해제한다. 이 함수는 OSD 서비스를 호출하기 위하여 IOCTL_OSD_UNREGISTER_APPLICATION 을 사용한다.
int OsdGetPublicKey(
IN int nKeyIndex,
OUT unsigned char*pModulusBuffer,
IN/OUT unsigned int*pModulusBufferLength,
OUT unsigned int*pExponent)
이 함수는 만약 키 테이블의 nKeyIndex row 에 위치되는 RSA 공개키를 가져오는데 성공하면 제로를 리턴한다. 공개키의 모둘러스(modulus)(1024 비트 숫자)가 지정된 버퍼로 리턴하고, 공개키의 지수(exponent)(3 또는 65537)가 pExponent에 의해 식별된 위치에 놓여진다. pModulusBufferLength에 의해 식별된 위치는 초기에 pModulusBuffer의 최대 길이 바이트로 설정되고, 호출을 리턴한 후에 이것은 실제로 사용되는 바이트 수로 설정된다. 키의 모둘러스는 Most Significant Byte(MSB)로 버퍼내로 복사된다. nKeyIndex 값은 제로로 시작하며 플래시(flash) ROM 으로부터 로드되는 키를 위해 순차적으로 증가한다. 음수의 nKeyIndex 값은 OS 가 실행된 훙에 WDL 의 OSD 시큐러티 모듈에 의해 SMM 공개키로 로드되는 키를 참조한다.
이 루틴은 애플리케이션이 대략 X.509 인증으로부터 알고 있는 공개키에 상응하는 nKeyIndex를 위치시키도록 애플리케이션에 의해 사용될 수 있다.
이 함수는 만약 호출자가 등록된 애플리케이션 또는 다른 OSD 루틴이 아니면 에러를 리턴한다. 등록되었기 때문에, 이 함수는 주기적으로 호출자 코드의 SHA1 다이제스트가 변경되지 않았음을 확인하게 된다.
이 함수는 OSD 서비스를 호출하기 위하여 IOCTL_OSD_GET_PUBLIC_KEY 를 사용한다.
int OsdRSAVerifySignedDigest(
IN int nKeyIndex,
IN unsigned char*pSignedDigestBuffer,
IN unsigned int*pSignedDigestBufferLength,
IN unsigned char*pDigestBuffer.
IN unsigned int*pDigestBufferLength)
이 함수는 RSA 디지탈 서명을 확인한다. 이것은 매칭되는 비밀키를 사용하여 암호화된 예상 다이제스트 값을 추출하도록 nKeyIndex에 의해 지정된 공개키를 사용하는 pSignedDigestBuffer 와 pSignedDigestBufferLength 에 의해 지정된 데이터 버퍼를 복호화하기 위해서 PKCS #1 포맷된 RSA 공개키 연산(operation)을 수행한다. 이것은 예상 다이제스트를 pSignedBuffer 와 pSignedBufferLength 파라미터에 의해 지정된 값과 비교한다. 만약 이들이 같다면, 이것은 제로를 리턴하고, 그렇지 않으면 이것은 제로가 아닌 에러 코드를 리턴한다. 만약 nKeyIndex 가 유효하지 않으면 이 루틴은 또한 에러를 리턴한다. pDigestBuffer 와 pDigestBufferLength 값은 OsdSHA1 최종 루틴을 호출함으로 생기게 된다.
pSignedDigestBuffer안의 데이터는 먼저 MSB에 기억되며 이것은 선택된 공개키를 위한 모둘러스와 정확하게 동일한 정도로 길어야 한다.
이 함수는 만약 호출자가 등록된 애플리케이션 또는 다른 OSD 루틴이 아니면에러를 리턴한다. 등록되었기 때문에, 이 함수는 주기적으로 호출자 코드의 SHA1 다이제스트가 변경되지 않았음을 확인하게 된다.
이 함수는 OSD 서비스를 호출하기 위하여 IOCTL_OSD_VERIFY_SIGNED_DIGEST 를 사용한다.
int OsdDigestInit(
OUT DigestContext*pDigestContext)
이 함수는 어떤 애플리케이션에 의해 호출될 수 있다. 이것은 SHA1 다이제스트 값을 계산하기 위해 사용될 수 있는 호출자 어드레스 공간에서 데이터 구조를 초기화한다.
호출자는 이 데이터 구조를 수정할 수 있고, 따라서 OSD 모듈은 결과의 정확성에 의존하지 않는다. 이들 SHA1 루틴이 서명을 확인하기 위해 애플리케이션에 의해서 사용될 때, 애플리케이션은 정확한 다이제스트 값을 계산하기 위해 그 자체를 신뢰하고 그 다음에 정확한 RSA 공개키로 계산하기 위하여 운영 시스템 드라이버(그리고 차례로 BIOS SMI 시큐러티 모듈)을 신뢰한다. OSD 층은 새로운 애플리케이션을 등록하고, 데이터 구조는 운영 시스템 드라이버의 메모리내에 유지되며, 따라서 운영 시스템 드라이버는 결과를 신뢰할 수 있다. DigestContext 데이터 구조 정의를 위한 8절을 참조하라.
int OsdDigestUpdate(
IN DigestContext*pDigestContext,
IN unsigned char*pBuffer,
IN unsigned int*pBufferLength)
이 함수는 어떤 애플리케이션에 의해 호출될 수 있다. 이것은 pBuffer 와 pBufferLength 파라미터에 의해 지정된 데이터 바이트를 제공함으로써 SHA1 다이제스트 오브젝트(object)의 상태를 갱신하도록 호출자 어드레스 공간의 데이터 구조를 사용한다.
pBufferLength 는 이 루틴을 호출하기 전에 버퍼에 바이트 숫자의 카운트로 채워져야 하는 위치에 대한 포인터이다. 이 루틴은 그 위치를 변경하지 않으며, 따라서 길이는 참조하는 대신에 직접 통과된다.
하지만, 이 설계에서 모든 버퍼 길이값은 인터페이스를 보다 균일하게 하기 위해서 참조에 의해 통과된다.
int OsdDigestFinal(
IN DigestContext*pDigestContext,
OUT unsigned char*pDigestBuffer,
IN/OUT unsigned int*pDigestBufferLength)
이 함수는 어떤 애플리케이션에 의해 호출될 수 있다. 이것은 제로로 통과될 수 있거나 또는 OsdDigestUpdate 루틴을 더 호출할 수 있는 데이터 블럭의 SHA1 다이제스트의 최종 결과를 계산하기 위해 호출자 어드레스 공간에서 데이터 구조를 사용한다. 이것은 패딩(padding)과 전체 길이(bit)를 추가하거나 최종 다이제스트 연산을 수행함으로써 데이터 구조의 버퍼에 남아 있는 어떤 바이트를 처리한다. 이 결과는 pDigestBuffer 와 pDigestBufferLength 에 의해 지정된 버퍼에 놓여진다. 이 함수를 호출하기 전에, pDigestBufferLength 는 pDigestBuffer 의 최대 크기를 지정하는 위치를 가리키고, 성공적인 완료후에 그 위치는 버퍼에 놓인 바이트의 수로 설정된다. SHA1 다이제스트를 위해 이 결과는 20 바이트 길이가 된다.
int OsdRandomGenerate(
OUT unsigned char*pDataBuffer,
IN unsigned int*pDataBufferLength)
이 함수는 pDataBufferLength 파라미터에 의해 지정된 바이트 숫자로 지정된 데이터 버퍼를 채우기 위해 운영 시스템 드라이버의 허위의 임의 숫자 제너레이터(generator)를 사용한다.
만약 pDataBufferLength 가 20 바이트 또는 그 보다 작으면, 다음에 아래의 단계(step)가 한번 실행되고 ResultBlock의 선두 바이트는 pDataBuffer내로 복사되고 나마지는 버려진다. 만약 20 바이트 이상이 요구되면, 아래의 단계가 필요한 만큼 반복된다. StateBlock 과 ResultBlock은 모두 20 바이트 값이다. StateBlock 은 PRNG 의 글러벌 상태(global state)를 나타낸다.
ResultBlock = SHA1(StateBlock∥StateBlock)
StateBlock = StateBlock xor SHA1(StateBlock∥ResultBlock)
pDataBuffer가 채워졌을 때, OsdRandomAddNoise 를 호출함으로써 종료한다.
이 함수는 만약 호출자가 등록된 애플리케이션 또는 다른 OSD 루틴이 아니면 에러를 리턴한다. 등록되었기 때문에, 이 함수는 주기적으로 호출자 코드의 SHA1 다이제스트가 변경되지 않았음을 확인하게 된다.
이 함수는 OSD 서비스를 호출하기 위하여 IOCTL_OSD_RANDOM_GENERATOR 를 사용한다.
int OsdPubKContainerSeal(
IN int nKeyIndex,
IN/OUT unsigned char*pContainerBuffer,
IN/OUT unsigned int*pContainerBufferLength,
OUT unsigned char*pMKBuffer,
IN/OUT unsigned int*pMKBufferLength)
이 함수는 디바이스 인증 서버로 보내진 데이터가 다른 클라이언트에 의해 읽혀지지 않도록 보증하기 위해 사용된다. 오직 디바이스 인증 서버만이 이 컨테이너를 개봉하기 위해 필요한 비밀키를 알고 있다. pContainerBuffer 파라미터는 개봉된 PubKContainer 구조를 유지하는 메모리의 블럭을 포인터한다. 호출자는 PubKContainer에 대한 절에서 기술된 바와 같이 다양한 필드에 채워진다. 또한 그 절은 이 함수에 의해 실행된 단계를 기술한다. nKeyIndex 는 컨테이너를 밀봉하기 위해 사용되어야 하는 공개키를 식별한다.
입력시에, pContainerBufferLength 는 컨테이너 버퍼에 맞춰지는 바이트의 최대수를 포함하는 위치를 가리킨다. 출력시에, 이것은 pContainerBuffer에 사용된 바이트의 실제 수를 포함하고 있다. nContainerBuffer 안의 정보는 보호되어야 하는 데이터의 길이를 기술한다.
pMKBuffer 와 pMKBufferLength 파라미터는 이 PubContainer 를 위해 발생된마스터 키를 보호하는 AppContainer로 채워지는 버퍼를 지정한다. 이 정보는 동일한 마스터 키로 MKContainer를 생성하기 위해 사용된다.
이 루틴은 OsdRandomAddNoise()를 호출함으로써 끝난다. 이 함수는 호출자가 등록된 애플리케이션 또는 다른 OSD 루틴이 아니라면 에러를 돌려준다. 주기적으로, 이 함수는 호출자 코드의 SHA1 다이제스트가 그것이 등록되었기 때문에 변경되지 않았다는 것을 확인할 것이다. 이 함수는 OSD 서비스를 불러내기 위해 IOCTL_OSD_PUBK_CONTAINER_SEAL을 사용한다.
int OsdSignedContainerUnseal(
IN/OUT unsigned char *pContainerBuffer,
IN/OUT unsigned int *pContainerBufferLength)
이 함수는 컨테이너가 서버에 의해 실제로 승인되는지를 확인하는 데 사용된다. 그것은 서명이 유효하지 않을 경우 에러를 돌려준다. SignedContainer의 포맷과 이 함수에 의해 수행되는 단계들은 SignedContainer에 관한 섹션내에 기술된다.
입력시, pContainerBufferLength는 컨테이너 버퍼내에 맞추어지는 최대 바이트 수를 담는 위치를 지시한다. 출력시, 그것은 pContainerBuffer에 사용되는 실제 바이트 수를 담는다. pContainerBuffer내의 정보는 보호되어야만 될 데이타의 길이를 기술한다.
이 루틴은 OsdRandomAddNoise()를 호출함으로써 끝난다. 이 함수는 호출자가 등록된 애플리케이션 또는 다른 OSD 루틴이 아니라면 에러를 돌려준다. 주기적으로, 이 함수는 호출자 코드의 SHA1 다이제스트가 그것이 등록되었기 때문에 변경되지 않았다는 것을 확인할 것이다. 이 함수는 OSD 서비스를 불러내기 위해 IOCTL_OSD_SIGNED_CONTAINER_UNSEAL을 사용한다.
int OsdMKContainerSeal(
IN/OUT unsigned char *pContainerBuffer,
IN/OUT unsigned int *pContainerBufferLength,
IN unsigned char *pMKBuffer,
IN unsigned int *pMKBufferLength)
이 함수는 컨테이너를 밀봉하기 위한 것이고, 마스터 키를 알고 있는 다른 사람들에 의해서만 개봉될 수 있다. 이 키는 디바이스 및 서버에 인식된 마스터 키나 클라이언트에 의해 생성되어 PubKContainer내의 서버로 전송되는 새로운 키일 수 있다. 입력시, pContainerBuffer 파리미터는 개봉된 MKContainer 스트럭쳐를 홀딩하는 메모리 블록을 지시한다. 출력시, 컨테이너는 밀봉된다. 호출자는 MKContainer에 관한 섹션내에 기술된 바와 같이 여러가지 필드를 채워야 한다. 그 섹션은 또한 이 함수에 의해 수행되는 단계들을 기술하고 있다. 이 함수는 키 사용법을 위한 클라이언트 상수를 사용한다.
입력시, pContainerBufferLength는 컨테이너 버퍼내에 맞추어지는 최대 바이트 수를 담는 위치를 지시한다. 출력시, 그것은 pContainerBuffer내에 사용되는 실제 바이트 수를 담는다. pContainerBuffer내의 정보는 보호되어져야만 되는 데이타의 길이를 기술하고 있다.
pMKBuffer 및 pMKBufferLength 파라미터는 OsdPubKContainerSeal 함수로의 호출에 의해 생성된 마스터 키를 보호하는 AppContainer를 홀딩하는 버퍼를 확정한다. 이 루틴은 OsdRandomAddNoise()를 호출함으로써 끝난다. 이 함수는 호출자가 등록된 애플리케이션 또는 다른 OSD 루틴이 아니라면 에러를 돌려준다. 주기적으로, 이 함수는 호출자 코드의 SHA1 다이제스트가 그것이 등록되었기 때문에 변경되지 않았다는 것을 확인할 것이다. 이 함수는 OSD 서비스를 불러내기 위해 IOCTL_OSD_MK_CONTAINER_SEAL을 사용한다.
int OsdMKContainerUnseal(
IN/OUT unsigned char *pContainerBuffer,
IN/OUT unsigned int *pContainerBufferLength,
IN unsigned char *pMKBuffer,
IN unsigned int *pMKBufferLength,
IN int wasSealedByServer)
이 함수는 주어진 마스터 키를 사용하는 또다른 엔티티에 의해 밀봉된 컨테이너를 개봉하기 위한 것이다. 입력시, pContainerBuffer 파라미터는 밀봉된 MKContainer 스트럭쳐를 홀딩하는 메모리 블록을 지시한다. 출력시, 컨테이너는 개봉된다. 개봉된 포맷을 위한 MKContainer에 관한 섹션을 보라. 그 섹션은 또한 이 함수에 의해 수행되는 단계들을 기술한다. 이 루틴에 의해 사용되는 키 용법 상수들은 파라미터 wasSealedByServer가 0이면 클라이언트 상수들이고, 그렇지 않으면 서버 상수들이다. 보다 상세한 것은 키 사용법 상수들에 관한 섹션을 보라.
입력시, pContainerBufferLength는 컨테이너 버퍼에 맞추어지는 최대 바이트 수를 담고 있는 위치를 지시한다. 출력시, 그것은 pContainerBuffer에 사용되는 실제 바이트 수를 담는다. pContainerBuffer내의 정보는 보호되어져야만 하는 데이타의 길이를 기술한다.
pMKBuffer 및 pMKBufferLength 파라미터는 OsdPubKContainerSeal 함수로의 호출에 의해 생성된 마스터 키를 보하하는 AppContainer를 홀딩하는 버퍼를 확정한다.
이 루틴은 OsdRandomAddNoise()를 호출함으로써 끝난다. 이 함수는 호출자가 등록된 애플리케이션 또는 다른 OSD 루틴이 아니라면 에러를 돌려준다. 주기적으로, 이 함수는 호출자 코드의 SHA1 다이제스트가 그것이 등록되었기 때문에 변경되지 않았다는 것을 확인할 것이다. 이 함수는 OSD 서비스를 불러내기 위해 IOCTL_OSD_MK_CONTAINER_UNSEAL을 사용한다.
int OsdAppContainerSeal(
IN/OUT unsigned char *pContainerBuffer,
IN/OUT unsigned int *pContainerBufferLength)
이 함수는 컨테이너를 밀봉하기 위한 것이고, 동일한 디바이스에 관하여 동작하는 동일한 프로그램에 의해서만 개봉될 수 있다. 입력시, pContainerBuffer 파리미터는 개봉된 AppContainer 스트럭쳐를 홀딩하는 메모리 블록을 지시한다. 출력시, 컨테이너는 밀봉된다. 호출자는 AppContainer에 관한 섹션내에 기술된 바와 같이 여러가지 필드를 채워야 한다. 그 섹션은 또한 이 함수에 의해 수행되는단계들을 기술하고 있다. 이 함수는 키 사용법을 위한 클라이언트 상수들을 사용한다.
입력시, pContainerBufferLength는 컨테이너 버퍼내에 맞추어지는 최대 바이트 수를 담는 위치를 지시한다. 출력시, 그것은 pContainerBuffer에 사용되는 실제 바이트 수를 담는다. pContainerBuffer내의 정보는 보호되어져야만 되는 데이타의 길이를 기술하고 있다.
이 루틴은 OsdRandomAddNoise()를 호출함으로써 끝난다. 이 함수는 호출자가 등록된 애플리케이션 또는 다른 OSD 루틴이 아니라면 에러를 돌려준다. 주기적으로, 이 함수는 호출자 코드의 SHA1 다이제스트가 그것이 등록되었기 때문에 변경되지 않았다는 것을 확인할 것이다. 이 함수는 OSD 서비스를 불러내기 위해 IOCTL_OSD_APP_CONTAINER_SEAL을 사용한다.
int OsdAppContainerUnseal(
IN/OUT unsigned char *pContainerBuffer,
IN/OUT unsigned int *pContainerBufferLength,
IN int wasSealedByServer)
이 함수는 이 머신에 관해 동작하는 이 애플리케이션에 의해 또는 특히 이 머신에 관한 이 애플리케이션을 위한 서버에 의해 밀봉된 컨테이너를 개봉하기 위한 것이다. 입력시, pContainerBuffer 파라미터는 밀봉된 AppContainer 스트럭쳐를 홀딩하는 메모리 블록을 지시한다. 출력시, 컨테이너는 개봉된다. 개봉된 포맷을 위한 AppContainer에 관한 섹션을 보라. 그 섹션은 또한 이 함수에 의해 수행되는 단계들을 기술한다. 이 루틴에 의해 사용되는 키 용법 상수들은 파라미터 wasSealedByServer가 0이면 클라이언트 상수들이고, 그렇지 않으면 서버 상수들이다.
입력시, pContainerBufferLength는 컨테이너 버퍼에 맞추어지는 최대 바이트 수를 담고 있는 위치를 지시한다. 출력시, 그것은 pContainerBuffer에 사용되는 실제 바이트 수를 담는다. pContainerBuffer내의 정보는 보호되어져야만 하는 데이타의 길이를 기술한다. 이 루틴은 OsdRandomAddNoise()를 호출함으로써 끝난다. 이 함수는 호출자가 등록된 애플리케이션 또는 다른 OSD 루틴이 아니라면 에러를 돌려준다. 주기적으로, 이 함수는 호출자 코드의 SHA1 다이제스트가 그것이 등록되었기 때문에 변경되지 않았다는 것을 확인할 것이다. 이 함수는 OSD 서비스를 불러내기 위해 IOCTL_OSD_APP_CONTAINER_UNSEAL을 사용한다.
int OsdAppContainerTransfer(
IN/OUT unsigned char *pContainerBuffer,
IN/OUT unsigned int *pContainerBufferLength
IN unsigned char *pAuthorizationBuffer,
IN unsigned int *pAuthorizationBufferLength)
이 함수는 컨테이너를 밀봉하기 위해 사용되고, 동일한 디바이스에 관하여 동작하는 다른 프로그램에 의해서만 개봉될 수 있다. 컨테이너의 원래의 오너는 그것을 개방하는 능력을 해제한다. 물론, 원래의 오너는 내용물을 복사하고 그 복사물을 계속해서 개폐할 수 있지만, 전달된 컨테이너는 다른 키로 암호화될 것이고, 따라서 새로운 오너만이 그것을 열 수 있다. 이 특징은 키스토로크를 포획하여 그것을 정확한 애플리케이션으로 보안적으로 전달하도록 보안 키보드 리더 모듈에 의해 사용될 수 있다.
입력시, pContainerBuffer 파리미터는 개봉된 AppContainer 스트럭쳐를 홀딩하는 메모리 블록을 지시한다. 출력시, 컨테이너는 밀봉된다. 호출자는 AppContainer에 관한 섹션내에 기재된 바와 같이 여러가지 필드를 채워야 한다. 그 섹션은 또한 이 함수에 의해 수행되는 단계들을 기술하고 있다. 이 함수는 키 사용법을 위한 클라이언트 상수를 사용한다. 이 함수는 새로운 오너에 의한 사용을 위해 컨테이너를 밀봉하기 전에 호출자가 현재 컨테이너를 소유하고 있다는 것을 확인한다(DecryptedCodeDigest를 체크).
pAuthorizationBuffer 및 pAuthorizationBufferLength 파라미터는 디바이스 인증 서버에 의해 발생된 SignedContainer의 위치와 길이를 확정한다. 보다 상세한 것은 보호되는 컨테이너를 위한 설계문서를 보라. 연산코드는 OpcOsdAllowTranster이고 그 컨테이너 내부의 데이타는 이 함수를 불러들이고 있는 프로그램의 AppCodeDigest와 이 컨테이너를 개봉할 수 있게 될 프로그램의 AppCodeDigest를 확정한다. 컨테이너의 SealersCodeDigest 필드는 이 함수를 호출한 프로그램을 식별할 것이다.
입력시, pContainerBufferLength는 컨테이너 버퍼내에 맞추어지는 최대 바이트 수를 담는 위치를 지시한다. 출력시, 그것은 pContainerBuffer에 사용되는 실제 바이트 수를 담는다. pContainerBuffer내의 정보는 보호되어져야만 되는 데이타의 길이를 기술하고 있다. 이 루틴은 OsdRandomAddNoise()를 호출함으로써 끝난다. 이 함수는 호출자가 등록된 애플리케이션 또는 다른 OSD 루틴이 아니라면 에러를 돌려준다. 주기적으로, 이 함수는 호출자 코드의 SHA1 다이제스트가 그것이 등록되었기 때문에 변경되지 않았다는 것을 확인할 것이다.
int OsdEnrollGenerateRequest(
OUT unsigned char *pPubKContainerBuffer,
IN/OUT unsigned int *pPubKContainerBufferLength)
이 함수는 의사 SMK, 마스터 키의 클라이언트 시드(seed), 및 세션 마스터 키를 발생할 것이다. 이 함수는 마스터 키의 클라이언트 시드로 밀봉된 PubKContainer를 리턴하며, 세션 마스터 키로 밀봉된 AppContainer를 리턴한다. PubKContainer는 디바이스 인증 서버로 전송될 것이다. BIOS는 SMRAM내에 클라이언트 시드 및 마스터 키를 기억할 것이다. 출력시, pPubKcontainerBuffer 및 pAppContainerBuffer는 버퍼를 지시한다. pPubKContainerBufferLength 및 pAppContainerBufferLength는 버퍼의 길이를 가지는 위치를 지시한다. 출력시에, 버퍼는 리턴 받은 컨테이너로 채워져야만 한다.
이 함수는 만약 성공적이면 리턴하며, 그렇지 않으면 에러를 리턴한다. 이 함수는 OSD 서비스를 호출하기 위하여 IOCTL_OSD_ENROLL_GENERATE_REQUEST를 사용한다.
int OsdEnrollProcessResponse(
IN unsigned char *pContainerBuffer,
IN unsigned int *pContainerBufferLength,
OUT unsigned char *pAppContainerBuffer,
IN/OUT unsigned int *pAppContainerBufferLength,
OUT unsigned char *pPubKContainerBuffer,
IN/OUT unsigned int *pPubKContainerBufferLength)
이 함수는 마스터 키를 발생시키고 그것을 SMRAM내에 기억하기 위하여 SMI 루틴을 호출한다. 그 루틴은 키 ID(SMK의 해시) 및 다른 데이터를 구비하는 Sealed AppContainer를 생성한다.
출력시에, pContainerBuffer는 온-라인 가입동안 디바이스 인증 서버에 의해 뒤로 전송된 MKContainer를 기억하는 버퍼 또는 오프-라인 가입동안 의사 서버 시드를 구비하는 SignedContainer를 지시한다. pContainerBufferLength는 버퍼의 길이를 특정한다. 출력시에, pAppContainerBuffer는 키 ID를 포함하는 Sealed AppContainer를 기억한다.
PPubKContainerBuffer는 오프라인 가입시 서버 시드와 클라이언트 시드를 포함하는 버퍼를 지시한다. 이 지시자는 온라인 가입시 NULL이 될 수 있다.
이 함수는 OSD 서비스를 불러내기 위해 IOCTL_OSD_ENROLL_PROCESS_RESPONSE를 사용한다.
int OsdInvalidateSMK()
이 함수는 이전의 가입에 의해 생성된 마스터 키를 무효화시킨다. 이 함수는 OSD 서비스를 불러내기 위해 IOCTL_OSD_INVALIDATE_SMK를 사용한다.
int OsdSetPublicKey(
IN unsigned int nKeyIndex,
IN unsigned char *pKeyBuffer,
IN unsigned int *pKeyBufferLength)
이 함수는 nKeyIndex에 의해 확정된 RSA 공개 키를 대체하거나 BIOS 키 테이블내에 새로운 키를 부가한다. 입력시, nKeyIndex는 대체하거나 부가하는 키를 확정한다. pKeyBuffer는 키 버퍼를 지시한다. pKeyBufferLength는 버퍼 길이를 지시한다.
내부함수가 이제 설명될 것이다. 다음의 함수들은 OSD 드라이버에 의해 내부적으로 호출된다. 그것들은 유저 애플리케이션에 노출되지 않는다.
int OsdInitialize(void)
이 함수는 오퍼레이팅 시스템 드라이버의 상태를 초기화한다. 이 오퍼레이팅 시스템 드라이버는 이 함수가 시스템내로 로딩된 후에 이 함수를 호출한다. 이 함수는 BIOS 층으로 등록하고 PRNG를 초기화한다. PRNG는 StateBlock을 제로화함으로써 초기화되고, 세마포어 파일로부터 기억된 엔트로피를 읽고, 그것을 2진법으로 변환하고 그것을 OsdRandomAddSeed 함수로 통과시킨다. 만약 아무런 기억된 엔트로피도 없다면, 다음으로 오퍼레이팅 시스템 드라이버는 엔트로피 바이트를 모으는 느린 프로세스를 수행하고, OsdRandomAddSeed를 호출한 다음 엔트로피를 세마포어 파일내로 기억하도록 OsdRandomAddSeed를 사용한다.
int OsdRandomAddNoise(void)
이 함수는 매번의 WDL's OSD Security 루틴들의 끝에서 호출된다. 그것은 침범자에게 다소 예측불가능한 글로벌 정보를 부가함으로써 글로벌 PRNG의 비예측성을 증가시키는 것을 도와준다.
새로운 컨텍스트로 OsdDigestInit을 호출.
StateBlock을 통과하는 OsdDigestUpdate를 호출
각각의 신속 엔트로피 소스를 위해:
신속 엔트로피 값(32-비트 또는 64-비트 값)을 통과하는 OsdDigestUpdate를 호출
마지막 신속 엔트로피 소스가 진행된 후에, ResultBlock을 생성하는 OsdDigestFinal을 호출
StateBlock = StateBlock xor ResultBlock
신속 엔트로피 소스는 CPU 사이클 카운터, 캐시 미스 카운트와 같은 CPU 통계치, 및 시스템 클록의 모든 비트를 포함한다. 새로운 StateBlock은 구 블록과 다이제스트 값의 배타적 논리합의 결과이다. 배타적 논리합으로 구 블록을 새로운 블록내로 혼합함으로써, 새로운 상태의 비예측성이 구 상태 만큼 되는(다이제스트 함수에 대한 가장 최근의 특성치를 가정하여) 것을 보장한다. 대조적으로 방정식:StateBlock = SHA1(StateBlock)은 비예측성의 크기가 줄어들게 하는데, 이는 SHA1이 2개의 입력 값이 동일한 출력 값으로 매핑하도록 야기할 수 있기 때문이다. 매 반복을 가진 가능한 출력은 거의 없다.
마더보더 또는 CPU가 하드웨어 RNG를 지원한다면, 이 하드웨어 값이 포함되어져야 한다. 속효성인 임의성의 크기를 부가하기만 하라.
이 함수는 호출자가 등록된 애플리케이션 또는 또다른 OSD 루틴이 아니라면 에러를 돌려준다. 주기적으로, 이 함수는 호출자 코드의 SHA1 다이제스트가 그것이 등록되었기 때문에 변경되지 않았다는 것을 확인한다.
int OsdRandomAddSeed(
IN unsigned char *pDataBuffer,
IN unsigned int *pDataBufferLength)
이 함수는 오퍼레이팅 시스템 드라이버의 PRNG의 상태를 업데이트한다. 이것은 다음 단계들을 수행한다.
StateBlock = StateBlock xor SHA1(StateBlock∥pDataBuffer)
다시말해, SHA1 컨텍스트를 초기화하고 그것을 StateBlock과 주어진 버퍼내의 바이트를 가지고 업데이트.
OsdRandomAddNoise() 호출
이 함수는 호출자가 등록된 애플리케이션 또는 또다른 OSD 루틴이 아니라면 에러를 돌려준다. 주기적으로, 이 함수는 호출자 코드의 SHA1 다이제스트가 그것이 등록되었기 때문에 변경되지 않았다는 것을 확인할 것이다.
int OsdRandomSaveEntropy()
이 함수는 오퍼레이팅 시스템 드라이버의 글로벌 PRNG로부터의 정보를 세마포어 파일의 필드내에 기억한다. 그것은 원 StateBlock을 기억하지 않는데, 이는 그것이 오퍼레이팅 시스템 드라이버가 랜덤 바이트의 동일한 시퀀스를 재사용하는것을 야기할 수 있기 때문이다. 대신에, 그것은 현재 (160-비트) 상태로부터 생성된 32-바이트(256-비트) 값을 기억한다. 그 값으로부터 PRNG를 재시작하는 것은 그것이 동일한 바이트를 재생성하는 것을 야기하지 않을 것이다. 그 기본 단계는:
랜덤 2진법의 32-바이트 버퍼를 요청하는 OsdRandomGenerate를 호출
이들 바이너리 바이트를 64 16진법 ASCII 캐릭터들로 인코딩
이들 캐릭터들을 세마포어 파일의 필드내에 기억.
OsdRandomAddNoise() 호출.
이 함수는 호출자가 등록된 애플리케이션 또는 또다른 OSD 루틴이 아니라면 에러를 돌려준다. 주기적으로, 이 함수는 호출자 코드의 SHA1 다이제스트가 그것이 등록되었기 때문에 변경되지 않았다는 것을 확인할 것이다.
데이타 포맷이 이제 설명될 것이다. 다음은 본 발명에 사용되는 데이타 스트럭쳐와 포맷의 기술이다.
인증 버퍼는 SignedContainer이다. 이 컨테이너내의 데이타 블록은 테이블 14에 규정되어 있다. 등록된 애플리케이션 테이블의 엔트리는 테이블 15에 규정되어 있다. 이 테이블은 링크되는 리스트로서 구현될 수 있다.
다음의 과제들이 본 발명에 의해 제기된다. 하나의 과제는 오퍼레이팅 시스템 드라이버로부터 애플리케이션 코드를 어떻게 읽어들이냐 하는 것이다. 커널 모드 OSD는 탑 레벨 드라이버로서 PASSIVE_LEVEL내에서 동작하고, 유저 모드 어드레스 공간을 읽을 수 있다.
또다른 과제는 호출자 엔트리 포인트를 어떻게 얻어내느냐 하는 것이다.app가 DeviceIOControl 시스템 함수를 호출할 때, 그것은 링3로부터 링0로 전환할 것이다. 그리고 다른 링에 대해서 하드웨어는 다른 스택들을 구현한다. 오퍼레이팅 시스템 드라이버는 엔트리 포인트를 얻기 위해 유저 모드 스택으로 역추적하는 것이 필요하다. 그것은 DeviceIOControl의 구현, 즉 그것이 얼마나 많은 스택 프레임(펑션 콜)을 가지느냐 하는 것에 달려 있다. 다음의 4가지 가능한 솔루션이 유효하다. (1) 예컨대 쓰루 익셉션과 같은 지시들을 에뮬레이트. (2) 드라이버를 통하는 대신에 유저 모드로부터 직접 BIOS 루틴들을 호출. (3) INT 게이트를 셋업. 인터럽트 핸들러를 셋업. 모든 함수들은 소프트 인터럽트에 의해 호출자가 될 것이다. (4) OSD 스페이스내에서 유저 코드를 확인 및 실행. 이 솔루션은 Win32 API와 동일한 문제점을 가질 것이다.
아래에서는 MFCA VPN 생성물서의 구성요소인 애플리케이션 등록 모듈(ARM)을 설명한다. 애플리케이션 등록 모듈은 클라이언트 디바이스와 암호화가능한 서버사이에서 교환되는 AppContainers를 보증하도록 접근을 구비하는 강한 인증 모듈(SAM)을 돕는다.
애플리케이션 등록 모듈은 VPN과 같은 서버 애플리케이션으로의 접근할 수 있는 클라이언트 디바이스용 AppContainers 키를 구비할 책임이 있다. 애플리케이션 모듈은 SSL과 같은 보증 통신 채널을 넘어 SAM으로 통신한다.
도 4는 다중 요소 클라이언트 인증을 설명하는 블록 다이어그램이다. 도 4는 가변 모듈이 어떻게 애플리케이션 등록 모듈과 상호작용하는 지를 도시한다.
SAM 및 애플리케이션 등록 모듈은 클라이언트/서버 관계를 갖고있다. 애플리케이션 등록 모듈은 다른 기업체의 SAM로의 여러 서버를 나타내는 인터넷 서버이다. 이것의 목적은 특별 기업체로의 특별 디바이스의 등록 동안에 클라이언트 및 SAM을 돕는데 있다. 최종 단계는 등록되는 디바이스에서 container를 밀봉 및 개봉하도록 적당한 App 키로서 SAM을 구비하는데 있다. 이러한 작동은 각각의 디바이스/기업체 결합을 위해서만 실행된다.
구성요소는 다음 오더를 야기한다. SSL 연결 검정기는 적당한 SAM이 SSL 연결에 의하여 애플리케이션 등록 모듈과 적응하는지를 체크한다. 애플리케이션 등록 모듈로의 다른 모든 형태의 연결은 재탐지된다. AppContainer 키 공급기는 첫째로 기업체에 어떤 체크를 실행하도록 수신된 pubKContainer를 사용하고, 둘째로 SAM에 마지막으로 리턴하는 AppContainerKey를 준비한다.
애플리케이션 등록 모듈로의 엔트리 포인트는 AppContainerKeyRequest와 같은 특정 URL을 포함한다.
예로서 https://arms.DeviceAuthority.com/arm/AppContainerKeyRequest의 URL은 클라이언트 시스템에 의하여 생성된 그것의 몸체 PubKContainer() 및 SAM에 의하여 구비된 임의의 특별 정보를 갖추고 있다.
클라이언트써어트 조정/인증/권한을 위한 작동이론이 지금 논의될 것이다. 애플리케이션 등록 모듈 웹서버의 mod_ssl은 디바이스 권한 RootCA 증명을 알도록 형성된다. Mod_ssl은 현재의 SAM을 체크한다. 클라이언트증명은 RootCA. 디바이스 인증을 이끄는 인증경로를 갖추고 있다. 예를 들면: SAM.클라이언트인증은 섭스크립션매니저.CA.서어트에 의하여 생기고, 이러한 섭스크립션 매니저.CA.서어트는 디바이스 권위 루트 CA 인증에 의하여 생긴다. mod_ssl내로 형성되는 이러한 마지막 서어트는 SAM 클라이언트서어트의 체크를 성공적으로 종료한다.
인증경로의 이러한 체크동안에, mod_ssl은 인증 취소 리스트(CRL)이 형성되도록 참고할 것이다. CRL은 SAM(예를 들면, SAM을 구입한 회사는 상업이 아님)을 취소하는 섭스크립션매니저를 매번 업데이트하게 될 것이다. 이러한 URL은 SAM안에 기억된다. 애플리케이션 등록 모듈은 규칙적으로 이러한 URL로부터 파일을 얻을 것이다.
인증서은 디바이스 인증 RootCA 및 섭스크립션 매니저. CA의 결합에 의하여 구비되고: SAM.클라이언트서어트는 SAM의 인증 구성에 의한다. 이것은 우리가 RootCA로서 Versign을 사용하게 되는 경우가 아니다.
인증서는 디바이스 인증 RootCA, 섭스크립션 매니저. CA 및 섭스크립션 매니저. CRL의 결합에 의하여 구비된다: SAM은 SAM.클라이언트서어트를 갖추고 있고 섭스크리트 매니저.인증RevocationList가 아니면 애플리케이션 등록 모듈과 접촉하도록 인증된다.
SSL 연결 검정기. 이것은 서블릿으로부터 취소된 자바 클래스이다. 이것은 주어진 연결의 인증 정보를 확인하도록 API를 서블릿에 제공한다. 서블릿은 ssl연결에 대한 정보를 유지하도록 적어도 요청된 객체를 통과한다. Ssl연결검정기 정보를 사용하는 것은 연결된 클라이언트가 이전에 등록된 것인지 여부를 결정한다.
연결 검정기는 임의의 실패한 시도를 로그한다. 성공적인 시도는 효과를 디버깅하기 위하여 로그된다. 검정기는 연결하는 클라이언트(SAM)에 정보를 제공하는 객체를 리턴한다. 또한 검정기는 요청으로부터 이용가능한 임의의 사용자이름 정보를 포착한다. 이것은 클라이언트서어트 매니저 서블릿에 의하여 사용된다.
입력은 서블릿 요청 객체이다: 사용자이름/패스워드가 이러한 요청을 만들도록 사용되면 SSL 클라이언트 인증 정보 및 사용자에 대한 정보를 유지한다. 출력은 IsSslOK(), GetCertInfo(), IsUserAuthenticated(), GetUserInfo()와 같은 방법으로 SslConnection 검정기 객체이다. SslConnection 검정기 객체는 x509 클라이언트 인증의 모든 분야에 접근한다.
AppContainerKey 공급기 서블릿은 애플리케이션 등록 모듈용 키를 조정한다. 이것은 ARM 모듈의 메인 엔트리 포인트이다. 이것은 SslConnection 검정기를 취소한다. 그것의 인풋 스트림로부터 클라이언트 디바이스의 pubkc()를 지행한 SAM에 정보를 유지하는 pubkc()를 수신한다. 이러한 SAM 정보는 SslConnection 검정기 객체가 알고 있는 정보와 일치하는 기업체 분야를 갖고있다. Enforcer를 야기하고, SslConnection로부터의 모든 정보 및 pubkc()로부터의 정보를 또한 통과한다. 이러한 서블릿을 초래하는 Enforcer's에의 기초함은 암호화로부터 AppContainerKey를 요청한다. pubkc()에서의 키 ID+ACD는 암호엔진으로 통과한다. AppContainerKey는 SSL 연결을 넘어서 SAM에 복귀된다.
입력은 키 ID, 기업체 정보 및 ACD를 유지하는 PubKC()로서 입력스트림(서블릿 API)이다. 요청 객체(서블릿 API로부터)는 현재 연결(SSL,...)에서의 정보를 유지한다. 출력은 출력스트림(서블릿 API로부터)에서 AppContainer키를 복귀하고, 데이타베이스에서 사용된 라이센스의 갯수를 수정한다.
섭스크립션 매니저는 라이센스를 조정하도록 강한 인증 모듈(SAM)을 위하여 요청된 정보를 모은다. 이들 라이센스는 MFCA생성에서의 인증 등록 모듈(ARM)으로부터 SAM에 의하여 요청될 수 있는 AppContainersKeys의 갯수를 제어한다. 애플리케이션 등록 모듈은 VPN에 접근가능한 클라이언트 디바이스를 위하여 AppContainer Keys를 제공할 책임이 있다.
세일즈인들은 섭스크립션 매니저에게 웹 사용자 인터페이스를 전형적으로 사용하는 SAM을 구입하는 회사에 라이센스를 팔도록 허용된다. 이러한 인터페이스는 SAM이 AppContainerKey를 요청하는 것을 결정하도록 애플리케이션 등록 모듈에 의하여 사용되는 회사, 라이센스의 갯수, 그들의 만기일, 세일즈 인의 ID 및 SAM 식별에 대한 정보를 모은다.
섭스크립션 매니저는 SAM이 load되고 증명되는 tamper 입증(승인된 및/또는 암호화된) 파일을 생성한다. 이러한 파일은 섭스크립션 정보(즉, 라이센스의 수는 SAM의 허용된 IP어드레스에서 사용되도록 허용됨)를 포함한다. 섭스크립션 정보 파일(SIF)에 부가적으로 섭스크립션 매니저는 또한 승인된 SAM's 식별로 복귀한다.
섭스크립션 매니저는 라이센스 정보 및 크라이언트 인증의 데이타베이스에서 전위(front-end)이다. 웹 사용자 인터페이스는 클라이언트 인증을 사용하는 라이센스 전매자(reseller)를 인증한다. 이것은 전매자가 라이센스를 얻도록 회사 이름, 회사 접촉 정보, 라이센스의 개수, 라이센스 유효일(시작일로부터 종료일까지), SAM(그 SAM에 섭스크립션 파일을 바인드하도록)의 IP 또는 MAC 어드레스, SAM's 클라이언트 인증 요청(CSR) 및 전매자 인증:을 포함하기 위한 회사에다음 정보를 요청한다.
섭스크립션 매니저는 SAM을 인스톨하는 사랍에게 보증되게 진행되는 다음 아이템:승인된 클라이언트 인증 및 탬퍼 입증 섭스크립션 정보 파일(SIF)을 생성한다. SIF 승인 유틸리티(SSU)에 의하여 승인된 SIF를 갖추어 탬퍼입증을 할 것이다.
회사 소유의 SAM만에 의해서가 아니라, 국내에서의 섭스크립션 매니저는 다음 정보: SAM의 클라이언트 인증을 취소하기 위하여 요청된 정보, SAM에의 정보(라이센스의 갯수, 만기일, 라이센스 갱신용 접촉정보...) 및 SAM이 구입된 회사에서의 정보로 데이타베이스를 업데이트 한다.
섭스크립션 매니저의 작동이론은 다음과 같다. 첫째로 계약은 전매자/채널-파트너와 디바이스 권한사이에서 설립된다. 그때 라이센스-전매자 정보 에디터/뷰어는 SAM에 라이센스를 팔도록 권한이 부여된 초기 전매자/채널-파트너 거래를 만들어내도록 디바이스 권한으로 누군가에 의하여 사용된다.
이것은 전매자/채널-파트너와 연결되어 얻는 사용자/패스워드를 생성한다. 전매자/채널-파트너는 임의의 회사에 설치되도록 SAM에 정렬된다. 그는 SAM 정보 에디터/뷰어에 로그하고 회사 정보 및 라이센스 정보를 가입한다.
회사는 SAM 인스톨을 마친다: 회사는 SAM에 IP 어드레스를 부여하고 클라이언트 인증 승인 요청이 생성된다. 이러한 정보는 전매자에게 전달한다. 전매자(또는 OTP를 갖춘 회사)는 SAM 정보 에디터/뷰어에 복귀하고 SAM 및 CSR의 IP 어드레스를 가입한다.
서버는 미승인된 SIF를 생성하고 SIF 승인 유틸리티로 그것을 보낸다. SSU는 즉시 승인된 SIF를 리턴한다. SAM의 CSR는 루트 디바이스 권한대신에 중간 CA로서 작동하는 섭스크립션 매니저에 의하여 승인된 작동가능한 클라이언트 서어트로 들어간다.
OTP 솔루션없이, 전매자는 SIF 및 클라이언트 인증을 회사와 통신한다. 회사는 SAM으로 알려진 디렉토리내로 SIF를 인스톨한다. 서어트는 그들의 SSL 모듈내로 인스톨되어 들어간다. 회사는 지금 AppContainerKeys를 요청하도록 준비된다.
모듈 구성요소는 지금 상세하게 설명된다. SSL 연결 검정기는 서브릿으로부터 야기되는 자바 클래스이다. 이것은 주어진 연결의 권한 정보를 확증하도록 API에 서블릿을 제공한다. ssl 연결에 대한 정보를 유지하도록 서브릿은 적어도 요청 객체를 통과한다.
이러한 정보 사용으로, SslConnection 검정기는 연결된 클라이언트가 이전에 등록된 하나인 인지를 결정한다. 아마도 이러한 검정기는 연결이 SSL을 넘고 클라이언트가 인증을 갖는지를 체킹하도록 제한될 것이다. 이러한 간편성은 아파치+mod_ssl이 어떻게 형성되는 지에 기인한다: 그들만이 공지된 인증을 갖춘 클라이언트로부터 연결을 받아들인다.
연결 검정기는 임의의 실패된 시도를 로그한다. 성공적인 시도는 디버깅 목적을 위하여 로그된다. 검정기는 연결하는 클라이언트(전매자 컴퓨터)에 정보를 구비하는 객체를 리턴한다. 또한 검정기는 요청으로부터 임의의 이용가능한 사용자이름 정보를 입수한다. 이것은 실제 권한부여된 전매작 그의 컴퓨터를 사용하고 다른 컴퓨터를 사용하지 않는 것이 입증하도록 사용될 것이다.
입력은 사용자이름/패스워드가 이러한 요청을 만들도록 사용되면 SSL 클라이언트 인증 정보 및 사용자의 정보를 남겨두는 서블릿 요청 객체이다. 출력은 IsSsOk(), GetCerInfo(), IsUserAuthenticated(), GetUserInfo()와 같은 방법을 갖춘 SslConnection 검정기 객체이다.
SAM 정보 에디터/뷰어 모듈은 라이센스 정보의 첨가/편집/삭제 등을 허용한다. 예를 들면, 회사마다, SAM IP/MAC 어드레스, 곧 만기인 라이센스마다 보고서의 생성을 허용한다. 모든 작동은 유효 전매자 정보(사용자이름/패스워드, 클라이언트 서어트)로 권한이 부여된다.
SIF 생성자 모듈은 섭스크립션 정보 파일을 생성한다. 생성된 SIF은 SIF 승인 유틸리티(SSU)에 보내진다. SSU는 SAM 소프트웨어로 운송된 비밀키의 매칭 공개를 사용하는 파일을 승인한다. 오직 한쌍의 SIF 승인 키가 있다.
SIF는 인간 판독가능한 파일이다. 이것은 지원되는 동안에, 날짜, IP 어드레스 등 뿐만 아니라 접촉 정보에 대한 즉각적인 접근을 IT 부 인원에게 허용한다. SIF는: 회사 이름, 회사 접촉 정보, 만기된 라이센스를 위항 접촉, 라이센스의 갯수, 라이센스 유효일(시작일부터 종료일까지), 전매자 식별, SAM의 IP 또는 MAC 어드레스(섭스크립션 파일을 그 SAM에 결합하도록)를 포함한다.
인증 승인 요청(CSR) 핸들러 모듈은 루트 디바이스 권한의 키로서 승인된 X509 compliant 인증을 생성할 책임이 있다. 요청이 서브미트된 전매자가 올바르게 권한이 부여되면(사용자이름/패스워드 및 클라이언트 인증이 권한이 부여됨) 오직 인증이 승인된다. SAM의 클라이언트 인증의 만기를 일러주는 SAM 정보, 통신 CSR 및 접촉 정보를 요청한다. CSR는 하나의 필드에서 머신의 IP 어드레스를 포함한다. 따라서, 하나의 분야에서 IP 어드레스로서 클라이언트 인증을 생성하도록 SAM 인스톨러의 책임이 있다.
출력은 SAM 머신에서 사용가능한 x509 클라이언트 인증이다. openssl은 SAM 및 섭스크립션 매니저에서 중요한 인증을 조정하는 언더라이닝 공구이다. 또한 이러한 모듈은 공표된 SAM.클라이언트인증의 취소를 조정한다. 취소 정보는 인증 취소 리스트(CRL)로 들어갈 것이다. 이러한 리스트는 opensll을 사용하여 조작된다. 이러한 CRL 파일은 이러한 서버에서 HTTP에 의하여 누군가를 위하여 다운로드 가능하다.
라이센스 만기 디텍터는 규칙적으로 섭스크립션 동안에 구비된 접촉으로 이메일을 보내고 라이센스의 데이타베이스를 스캔한다. SAM 인증 만기 디텍터는 규칙적으로 CSR동안에 구비된 접촉으로 이메일을 보내고 SAM 클라이언트 인증을 생성한 데이터베이스를 스캔한다.
라이센스-전매자 정보 에디터/뷰어는 시스템으로 거주자를 등록하고 그들의 브라우저 또는 올바른 사용자이름 및 패스워드 또는 양자를 위하여 그들을 클라이언트 인증에 구비한다. 또한 전매자가 세이즈에서 어떻게 잘 실행하는 것을 트래킹한다.
SIF 승인 유틸리티(SSU)는 섭스크립션 정보에 접근하도록 디바이스 권한을위하여 쉬운 방법을 제공한다. 최소로, SSU는 SIF를 승인한다.
애플리케이션: 다중-팩터 클라이언트 권한은 지금 설명될 것이다. 시스템의 하나의 애플리케이션은 가상 비밀 네트워크(VPN)을 위한 다중-팩터 클라이언트 권한(MFCA) 애플리케이션이다. 권한 프로세스의 제 1 부분은 사용자이름/패스워드 쌍(사용자가 아는 어떤것)이다. 제 2 부분은 암호화가능한 디바이스의 권한 또는 BIOS기초 또는 소프트웨어(사용자가 갖춘 어떤것)를 사용하는 것이다.
MFCA의 단일 버전에 있어서, 패스워드 조회는 legacy 패스워드 데이타베이스를 사용하는 권한 서버에 RADIUS를 통하여 종래의 전송에 의하여 달성된다. 바람직한 실시예에 있어서 이러한 프로세스는 미국특허 제 에 개시된 SPEKE 패스워드 권한 프로토콜을 사용하여 강화된다. 양자의 경우에 있어서, MFCA는 디바이스 권한을 위하여 새로운 메카니즘을 제공한다.
시스템은 다음 소프트웨어 구성요소를 포함한다. 클라이언트 소프트웨어 구성요소는 VPN 서버에 권한을 부여한 클라이언트 디바이스에서 작동한다. 소프트웨어는 압호화가능하게 된다.
소프트웨어는 기업체-보호의 네트워크 내부에 보호하는 VPN의 하나이상의 서버 머신에서 작동한다. 이것은 VPN 제조품을 구입하는 회사의 IT 부에 의하여 운영된다.
소프트웨어 구성요소는 인터넷에 연결된 디바이스 권한 서버(기업체 외의 권한에 의하여 운영될 수 있는)에서 작동하고 KID/SMK 쌍의 데이터베이스에 접근으로 작동한다.
MFCA 전체상은 강화된 VPN 클라이언트를 논의하여 구비된다. 클라이언트 디바이스는 디바이스 권한으로 등록되는 전형적인 윈도우 머신이다. 등록후 클라이언트 디바이스는 유효 마스타 키를 갖추고 있다. 바람직한 실시예에 있어서, 비록 소프트웨어 버전만이 사용되어도, BIOS ROM에서 실행된 본 발명의 암호화 특성을 갖춘 firmware support를 갖추고 있다. 전형적으로 머신은 VPN 게이트웨이를 통하여 그의 회사의 제한된 네트워크에 접근을 원하는 클라이언트 VPN 소프트웨어의 사용자에 의하여 소유된다.
전형적으로 클라이언트는 규칙적인 인터넷 서비스 프로바이더(ISP)를 통하여 인터넷에 접속한다. ISP와 VPN 게이트웨이 사이의 네트워크는 믿을만하지 못하여, 이들 두 파티사이에서의 통신은 보증되어야 한다. VPN 솔루션의 제 1 목적은 클라이언트 디바이스에서 VPN 게이트웨이로의 end-to-end 암호화 보증을 구비한다.
MFCA 클라이언트는 서버와 보안링크를 설정하도록 표준 VPN 클라이언트 소프트웨어와 협력하는 클라이언트 애플리케이션 그리고 본 발명에 의해 구현되는 암호화 코어를 포함한다. MFCA 구조는 머신이 VPN 로그인 전에 가입되는 것을 필요로 한다. 클라이언트 애플리케이션은 실행되는 제 1 시간동안에 클라이언트가 이전에 가입되었는지 여부를 확인한다. 이전에 가입되지 않았다면, 클라이언트 애플리케이션은 가입을 수행하고, 그리고 이것이 완성된 후에만, 나머지의 MFCA 작동을 계속한다.
Enterprise VPN 게이트웨이 및 Strong Authentication Module(SAM)은 본 발명에 의해 제공된다. MFCA-enabled enterprise는 엔터프라이즈의 보호된 네트웍과인터넷사이에 부착된 VPN Gateway 서버를 가지고 있다.
VPN은 전형적으로 이들 사이에서 협력하는 다수의 머신을 포함하고 있어서 접근을 허용하거나 신뢰할 수 없는 전송을 막는다. 통상적으로 이들은 방화벽과 함께 작동한다. 중요한 머신은 VPN 게이트웨이 와 Strong Authentication Module(SAM) 서버이다.
SAM은 코퍼레이트 네트웍내에 유지되고, 그리고 근본적으로 신뢰된다. 어떤 경우에는 이것은 VPN Gateway 와 SAM 서버사이의 통신이 암호화할 필요가 없다는 것을 의미한다. 2개의 머신을 위한 간단한 보안체크는 코퍼레이트 네트웍내에서 이루어지는 루팅이 신뢰할 수 있는, 다른 하나의 IP 어드레스에서 체크된다.
SAM은 특정의 사용자 및 디바이스를 위한 내부 네트웍에 액세스를 허용하는 VPN 게이트웨이와 인터액트하는 서버 소프트웨어이다. 등록된 디바이스의 "데이터베이스"에 액세스되는데, 이것은 허용된 액세스가 될 것이다. SAM 코드와 데이터베이스사이의 인터페이스는 상이한 데이터베이스 구성을 인터페이스하에 위치시키도록(예를를면, ODBC 또는 LDAP를 사용하므로서), 가능한한 개방되어 있어야 한다. SAM-Database 연결에 관하여 주의를 기울여야 하는데, 이것은 Secure Sockets Layer(SSL) 프로토콜을 사용하여 수행될 수 있다.
SAM은 App Containers를 밀봉 및 개봉하는 코드를 포함하고 있다. SAM Server는 라이센싱 정책의 트래킹(너트웍에 액세스할 수 있는 디바이스 귄리의 만기, 허용되는 디바이스의 수, 등)과 통합될 수 있다. 암호화 기능은 BIOS-ROM 및 소프트웨어-온리 폼 양자에 구비될 수 있다.
이들 머신에 추가하여, 부가적인 하드웨어 및/또는 소프트웨어는 디바이스/사용자 페어가 허용된 액세스인지를 결정하는데 있어서(투-팩터 인증의 제 1 파트) SAM과 Gateway와 협력할 수 있다. 폴리시-베이스 액세스 라이트를 결정하기 위한 여러가지 시스템 그리고, 유저네임과 패스워드의 데이터베이스에 액세서를 가진 RADIUS를 포함하는, 이러한 기능을 수행하는데 당해 산업에서 여러가지 표준과 제품이 사용된다.
SAM 콤포넌트는 소프트웨어 라이센싱 체계를 시행하는데 역시 사용될 수 있다. SAM 콤포넌트는 전형적으로 VPN을 소유하고 있는 엔터프라이즈의 IT 디파트먼트에 의해 운영되고, 그리고 임의의 다른 기관에 의해 운영되지않는다. 하지만, 엔터프라이즈에게 MFCA 소프트웨어를 사용할 권리를 판 다른 당국과 신뢰관계를 가질 수 있다.
라이센싱 폴리시는 엔터프라이즈의 전체적인 평가를 위한 그리고 개별적인 클라이언트 평가(예를들면, 어떤 사람이 그의 랩탑을 분실할 수 있고, 그리고 우리는 이 디바이스를 제거한다)를 위한 평가 만료시기를 고려해야 한다. SAM은 시스템 관리자에 의해 설정된 정책에 따라서 이들 취소와 만기를 수행한다.
라이센스는 데이터베이스에 액세스허용되는 최대한의 수의 디바이스에 근거할 수 있다. 라이센스는 무엇이 일어났는지 주기적으로 청취하고 추적하는 기능을 한다. 이것은 레귤러 베이시스에서 벤더-스페시픽 로케이션에 정보를 보내는 SAM을 포함할 수 있다. 라이센스 운영은 바람직하게 원격 웹 베이스 툴로부터 이루어진다.
Application 등록 모듈(ARM)은 다른 엔터프라이즈의 SAMs에 서비스를 하는 인터넷 서버이다. 그 목적은 특정의 엔터프라이즈와 특정의 디바이스의 등록 동안에 클라이언트와 SAM을 돕는 것이다. 긍극적인 결과는 등록되는 디바이스에서 컨테이너를 밀봉 및 개봉하도록 적절한 App Key를 SAM에 제공하는 것이다.
이러한 작용은 "MFCA Registration"이라고 부르는 과정동안에, 각각의 디바이스/엔터프라이즈 콤비네이션에서 단지 하나를 수행하는데 필요하다. 애플리케이션 등록 모듈 서버는 당시의 상이한 회사에 대한 유효 라이센스, 이들 라이센스의 예상 증명서에 관한 것 등을 설명하는 정보를 보유하는 백엔드 데이터베이스와 통신하는 일부 프런트-엔드 서버, 추측컨데, 반드시는 아니지만 웹 서버로 이루어진다.
라이센스-인포스먼트 맨이 여기에서 이루어진다. 특정의 엔터프라이즈를 위한 등록된 유저의 수의 기본적인 트래킹은 한 예이다. 애플리케이션 등록 모듈 서버는 라이센스 인포싱 및 라이센스 로깅 그리고 오디팅을 수행하지만, 개별적인 로그인은 트랙하지않는다. 애플리케이션 등록 모듈은 또한 인롤먼트의 과정동안에 발생한 KID/SMK 테이블을 기억하는 디바이스 당국 "Encryption Server"에 액세스한다. 웹 베이스 원격 인터페이스는 이들 엔터프라이즈 평가를 취급한다.
애플리케이션 등록 모듈을 위한 인포스먼트 유틸리티로서, 데이터 엔트리는 SAM이 중앙 ARM 데이터베이스와 상호 작용할 수 있게 하는 적절한 정보를 리셀러, 채널 파트너, 그리고 IT 관리자가 입력할 수 있게 하는 웹 인터페이스(서브스크립션 매니저)에 의해 자동화 되어있다. 아래의 테이블에 리스트된 프로세스가 포함되어 있다.
프로세스 네임 설명
MFCASAM을 위한 라이센싱 정보를 발생하는 과정. 라이센스를 Subscription판매하는 판매원이 서브스크립션 매니저를 호출하는 디바이스 인증내에 로깅하므로서 서브스크립션 프로세스를 시작한다. 판매원은 얼마나 많은 라이센스가 필요한지, SAMs 클라이언트 확인, 그리고 다른 정보,...:를 SAM을 산 회사에 대한 정보를 입력한다.
이러한 프로세스의 출력은 서브스크립션 인포메이션 파일(SIF), 그리고 클라이언트 확인(서티피케이트참조)이다.
Enrollment클라이언트 디바이스가 SMK를 취득하고 그리고 암호서비 스를 사용할 수 있는 프로세스. 이러한 프로세스는 클라이언트 디바이스 및 디바이스 인증 Enrollment Server를 포함한다. Enrollment는 BIOS 또는 Emulation API에 암호 코어를 담기위해 클라이언트 디바이스를 필요로 한다.
MFCA 특정의 엔터프라이즈의 VPN의 서비스를 사용하기위해 클Registration라이언트 디바이스가 등록되는 프로세스. 이것은 클라이언트, SAM Server, 및 ARM Server를 갖춘 일부의 상호작용을 포함한다. Registration은 클라이언트 디바이스가디바이스 인증을 갖추고 사전에 수행되는 것이 필요하다. 이러한 등록의 긍국적인 목적은 클라이언트 디바이스와 교환될 App Containers를 밀봉 및 개봉하도록 SAM에 적절한 App Key를 제공하는 것이다.
Login클라이언트 디바이스가 엔터프라이즈의 내부 네트웍으로의 액세스를 얻는 프로세스. 이것이 MFCA가 달성하기 원하는 최종의 서비스이다. 로그인은 클라이언트 디바이스와 SAM Server사이의 일부의 상호작용을 포함한다. SAM Server는 VPN Gateway를 갖춘 투-팩터 인증의 제 2 페이즈로서 클라이언트 디바이스를 인증한다. 이것을 수행하기 위해서 App Containers를 사용한다.
상기 설명에 더하여, VPN 클라이언트, SAM Server, 및 ARM Server는 App Keys를 성공적으로 내놓을 수 있게 형성되어 있다.
등록의 프로세스는 다음의 2 단계를 포함하고 있는데: (1)디바이스 인증으로부터 우리의 코포레이션의 SAM 서버까지 특정 머신으로 작용하는 App Key의 트랜스미션, 그리고 (2)SAM 서버로부터 클라이언트까지 Customer App Key를 발생하는 Customer Secret의 트랜스미션이다.
App Key는 다음의 기능을 하는데: (1)등록된(디바이스 인증과 머신자체에 의해서만 알려진) 머신의 비밀 마스터 키, 그리고 (2)애플리케이션(이 경우에, VPN Client 애플리케이션)의 운영 시스템 드라이버이다.
App Key는 다음의 암호화 작업의 결과이다.
ApKey = trunc128(SHA1(SMK∥ACD)).
SAM 서버는 다른 Device Authorities로부터 비밀을 지키는 추가적인 128-비트 세크리트, Customer Secret를 생성하고, 다음의 작업으로 Customer App Key를 계산한다.
CustomerAppKey = trunc128(SHA1(AppKey∥CustomerSecret))
SAM 서버는 이러한 값을 기억하고(또는, 선택적으로 App Key 와 Customer Secret를 개별적으로 기억한다), 그리고 Customer Secret를 클라이언트에게 보낸다. 클라이언트는 이러한 세크리트를 기록한다(이것이 세크리트 마스터 키인 것으로 "빅 세크리트"가 아닐 지라도). SAM은 또한 Login Counter 메카니즘을 위한 초기값을 기억할 수 있는 밀봉된 App Contain을 클라이언트에게 보낸다. 다른 실시예에서, 보안 챌린지/리스폰스 기구가 Login Counter 메카니즘을 대체한다.
프로세스 로그인은 App Containers를 근거로 하고 있다. 클라이언트는 사전에 수신된 App Container를 개봉하여, 로그인 카운터를 증가시키고, 컨테이터를 재밀봉하고 그리고 이것을 VPN Authentication Protocol의 부분으로서 VPN Gateway에 보낸다.
SAM 서버는 이 컨테이너를 획득하여, 열고, 최종 기록된 값과 로그인 카운터와 비교한다. 그 결과가 수용가능 범위내에 있으면, 그것은 호출자 클라이언트가 엔터프라이즈의 내부 네트워크에 액세스하는 것을 허가한다.
대안 로그인 프로세스에서, 클라이언트는 VPN 게이트웨이로부터 랜덤 챌린지값을 수신하고, 이미 수신된 AppContainer을 개봉하고, 고객 비밀 및 챌린지 값을 일차함수(통상적으로 SHA1과 같은 암호화 해시 함수를 사용하여)로 결합하며, 일차함수의 결과 값을 VPN 인증 프로토콜의 일부분으로서 VPN 게이트웨이에 반환한다.
SAM 서버는 이 결과를 획득하여, 이것을 자신이 스스로 연산한 고객 비밀과 챌린지 값의 일차함수의 결과와 비교한다. SAM 서버의 연산된 결과가 클라이언트의 결과와 매칭된다면, VPN 게이트웨이는 호출자 클라이언트가 코포레이션의 내부 네트워크에 액세스하는 것를 허가한다.
MFCA의 특정한 구현은 특정한 VPN 소프트웨어 제품을 그 대상으로 한다. 몇몇 VPN 판매자는 다른 컴퍼니가 클라이언트 및 서버에 그들의 제품을 커스토마이징할 수 있게 하는 APIs를 제공한다. 이들 판매자는 이들 APIs와 상호작용하기 위해 가입된 소프트웨어를 위한 정품 프로그램을 가질 수 있다. MFCA는 VPN 판매자 제품과 애드-온 형태로 또는 통합된 형태로 교부될 수 있다.
연관된 프로세스가 이제 상세히 설명된다.
등록은 MFCA 설치에 있어서 선결 필요사항이다. 클라이언트 디바이스는 운영 시스템드라이버(OSD), BIOS를 액세스하는 저레벨 드라이버 프로그램 및 하드웨어를 포함하는, 코어 암호화 프로그램을 가져야만 하고, 이미 등록되어야만 하고 유효 마스터 키를 기억해야 한다.
등록동작은 VPN 소프트웨어 설치의 일부분으로서 수행될 수 있다. 즉, 클라이언트가 처음에 VPN을 액세스하려 할 때 클라이언트 디바이스가 이미 등록되었다면, 그것은 그당시에 그곳에서 등록할 수 있다. 이것은 맨처음 사용자가 처음으로클라이언트 애플리케이션을 시작할 때 그가 경험하는 것의 일부분으로서 발생할 것이다. 사용자로부터 어떠한 입력도 필요치 않다.
클라이언트 셋업은 사용자가 MFCA VPN 클라이언트를 포함하는 소프트웨어를 수신하는 것을 포함하고, 그것은 MFCA 셋업 및 MFCA-향상된 로그인 인증을 위한 추가의 코드를 포함하는 기존의 VPN 클라이언트에 대한 향상된 형태일 수 있다. 바람직하게, VPN 판매자의 클라이언트 SDK에 의해 제공된 APIs는 MFCA 코드가 그들의 라이브러리와 정적으로 링크되는 것을 허용할 수 있어야 한다. 이상적으로는, MFCA 제품의 모든 관련 부분이 그 ACD가 계산된 범위내이다.
서버 셋업 프로세스가 이제 설명되다. 강력한 인증 모듈(SAM;Strong Authentication Module) 구성: 사용자/디바이스 계정을 셋업함. 이것은 통상적으로 엔터프라이즈 시스템 관리자에 의해 수행된다. SAM은 VPN 및/또는 인증 서버와 상호작용한다. 여기서 다수의 옵션이 가능하다.
SAM은 기존 인증 서버를 위한 플러그-인 일 수 있다. 인증 서버와 SAM간의 인터페이스는 API이다. SAM은 일부 포트의 요구를 듣고, 특정 프로토콜 또는 RADIUS를 인식하는 서버이다. 인증 서버와 SAM간의 인터페이스는 네트워크 프로토콜이다.
VPNs 및 RADIUS 서버는 또한 매우 구성이 용이하고 다수의 구성을 허용하는 서버이다. RADIUS 서버는(그것이 존재하는 경우에) 그 방법, 사용자 이름 및 패스워드등에 좌우되는 클라이언트를 인증한다.
SAM은 디바이스를 인증하는 것에 대한 일을 처리한다. 단순한 실시예는 독립적인 RADIUS 서버를 포함하고, 게이트웨이에 직접 대화하는 데에 사용될 수 있거나, 프록시로서 작용하는 다른 인증 서버에 직접 대화하는 데에 사용될 수 있다. 구성 사용자 인터페이스(UI)는 임의의 다른 인증 서버와 독립적일 수 있다.
VPN 게이트웨이/RADIUS 서버 구성. 관리자는 사용자이름/패스워드 쌍을 구성한다. 이것은 사용자가 로그인하는 데에 있어서 "영구" 사용자이름/패스워드 쌍으로 된다. 이 프로세스는 임의의 디바이스 인증을 필요로 하지않고, MFCA에 독립적인 "통상적인" 일-인자 구성이다.
SAM 구성. 관리자는 사용자 이름, 애플리케이션 디바이스 ID(ADID), 및 들록 패스워드를 구성한다. 대안 실시예에서, 관리자는 유효한 조합을 지시하고, 사용자가 특정 머신으로부터 인증받는 것을 제한하기 위해 사용자와 디바이스간에 연관관계를 생성할 수 있다.
애플리케이션 디바이스 ID(ADID)는 인간이 판독가능한 공용 이름, 반드시 엔터프라이즈에 속하진 않지만, 각각의 엔터프라이즈내의 고유 값이다. 등록 패스워드는 시스템 관리자에 의해 생성된다. 이것은 진정한 난수이어야 한다.
대안 실시예에서, ADID의 위치에서 작용하기 위해 고유 식별자로서 키 ID를 사용할 수 있다. 그러나, 실제적으로 통괄적인 "고유 식별자"의 아이디어를 오신하므로, 바람직한 실시예에선 IT 관리자에 의해 선택된 개별 ADID를 사용한다. SAM 데이터베이스에 기억된 모든 패스워드는 해싱된다.
본 아키텍춰에서 설명된 모델은 사용자의 데이터베이스와 디바이스의 데이터베이스가 분리되어 있음을 내포한다. 이것은 사용자의 데이터베이스에 존재하는임의의 시용자가 디바이스의 데이터베이스에 존재하는 임의의 디바이스에 의해 인증되는 결과를 갖게 된다. 트정한 머신에 링크되어야 할 특정 사용자에게 어떠한 제한도 강제되지 않는다.
MFCA 등록(제1 연결). 사용자는 자신이속한 엔터프라이즈의 IT 부서로부터 사용자이름/패스워드 쌍 및 ADID/등록 패스워드 쌍을 획득한다. 사용자가 경험하는 것은 다음과 같다.
사용자는 설치 애플리케이션을 실행한다. 이것은 일반적인 Windows 설치이다. 클라이언트가 등록되지 않으면, 등록 동작이 수행된다. 설치 프로그램은 사용자를 식별할 데이터의 부분들을 사용자가 VPN에 입력하도록 프롬프팅한다. 정상 로그인을 위해선, 사용자이름/패스워드를, 등록을 위해선 ADID/등록 패스워드를 프롬프팅시킨다.
사용자는 맨처음에, VPN 게이트웨이/RADIUS를 연결하고, 사용자이름/패스워드 쌍을 인증하고 사용자가 들어올 수 있게하는 현재 방법을 검사한다. SAM은 외부 ARM 서버로 디바이스를 등록하고, 그 자신을 구성한다. 모든 것이 성공적이면, 사용자는 VPN에 있을 것이다.
후속하는 로그인에서, 사용자는 자신의 ADID/등록 패스워드를 더 이상 입력할 필요가 없게된다. 클라이언트 VPN 애플리케이션은 사용자가 사용자이름 및 패스워드만을 입력하도록 프롬프팅해야 한다. 클라이언트는 ADID, AppContainer의 위치 및 서버로부터 수신한 고객 비밀을 기억한다.
전체 서버 상호작용은 다음과 같은 흐름을 갖는다. MFCA 등록을 예시하는블록도인 도 4에 대해 설명된다.
클라이언트 애플리케이션은 이미 존재하는 VPN 프로토콜을 이용하여, VPN 게이트웨이에 맨처음 요구를 행한다. VPN 게이트웨이는 이미 존재하는 인증 방법을 사용하여 RADIUS 서버로 통상적인 방식으로 사용자이름 및 패스워드쌍을 검사한다. VPN 게이트웨이는 그후 클라이언트가 SAM 서버로 등록을 필요로 함을 결정한다. VPN 게이트웨이는 상기 요구를 SAM 서버에 보낸다.
상기 요구는 (1) 개방상태에서, ADID를, (2) 엔터프라이즈 이름/URL을 포함하는 적절한 디바이스 인증 서버의 통심 공용 키로 암호화된 PubKContainer와, App(또는 ARM 데이터베이스내의 ACD를 식별하는ID)를 위한 ACD를 포함한다.
SAM은 PubK를 복호화하지 못하므로, 따라서 이를 ARM 서버로 전달한다. 이러한 연결은 몇몇 종류의 SAM의 인증을 애플리케이션 등록 모듈에 제공한다. HTTPS 구현에서, 디바이스-인증기관-발행의 인증서는 SAM 서버에 제시되고 역으로도 제시되어, 여기서 인증서는 디바이스 인증기관과의 계정을 개방하는 프로세스 동안에 성립된다.
애플리케이션 등록 모듈은 통신 키의 비밀 비트를 사용하여 PubK Container를 개방하고, 필요하다면 새로운 디바이스 ADID로 내부 테이블을 업데이트한다. 애플리케이션 등록 모듈은 엔터프라이즈를 데이터베이스에 대하여 체크하여 유효한 라이센스를 가지는가 여부를 알아낸다. 모든 것이 무사하다면, 애플리케이션 등록 모듈은 클라이언트 디바이스의 키 ID를 가지고, 따라서 이는 시크리트 마스터 키를 찾아내고, 주어진 ACD에 대하여 App Key를 컴퓨팅한다. 그 후 이는 이 App Key를SAM으로 (가능하다면 HTTPS 연결의 응답을 사용하여) 안전한 방법으로 리턴 전송한다.
SAM은 ADID에 대한 App Key를 기억하고, Customer Secret에 대한 새로운 임의의 값 및 App Key로 Customer App Key를 빌드(build)하며 (또는 대신에 SAM이 이러한 Customer App Key를 직접 기억하고 App Key를 무시하며), 최초 App Container를 빌드하여, 그곳에 최초 128-비트 로그인 카운터(이것의 최초 값은 등록 패스워드일 수 있다)와 엔터프라이즈 이름/URL을 기억한다.
SAM은 App Container를 밀봉하여 이와 Customer Secret를 클라이언트에게 (바람직하게는 VPN 게이트웨이를 통하여) 리턴하여 전달한다. 이러한 App Container는 클라이언트에게 암호화되어 전송될 필요는 없다. 이것을 육안으로 볼 수 있는 것은 어떠한 것도 손상시키지 않는다. 도청자는 이를 기록할 수 없고 이를 서버에 보낼 수 없으며 VPN으로의 액세스를 시도하고 얻을 수 없는데, 이는 Container가 카운터의 틀린 값을 가지기 때문이다.
VPN 게이트웨이는 SAM 서버로부터 Ok를 받고, 내부의 엔터프라이즈 네트워크에 클라이언트 액세스를 허여한다. 클라이언트는 App Container 및 Customer Secret 모두를 공지의 위치에 기억한다.
애플리케이션 등록 모듈은 App Key를 취급해내지만, Customer Secret 및 로그인 카운터의 최초 값은 알 수 없고, 이들은 SAM에만 알려져 있다. 이는 비록 디바이스 인증기관이 시큐리티를 제공하는데 도움을 주긴 하지만 이는 클라이언트 디바이스로 가장할 수는 없고 인증없이는 엔터프라이즈로 들어갈 수 없다는 것을MFCA-가능한 엔터프라이즈에게 보증한다.
클라이언트 디바이스. 대화창은 사용자명과 패스워드, 및 엔터프라이즈/URL 확인을 요구한다. 이는 시스템에 의해 기억되기 때문에 사용자는 ADID에 다시 들어갈 필요없다. 클라이언트 머신은 VPN 게이트웨이에 접촉하여 사용자명/패스워드 쌍을 (RADIUS 또는 기타) 통상의 방법으로 인증한다.
VPN 게이트웨이는 클라이언트가 추가의 인증을 요구한다는 것을 찾아내고, 또한 그것이 그 자체를 인증하는 것을 요구한다. 클라이언트는 (Customer App Key, App Key로부터의 컴퓨터 및 기억된 Customer Secret을 사용하여) App Container 를 개봉하고, 로그인 카운터(128비트, 음은 허용안됨)를 증분시키고, 이를 다시 밀봉하며, 이를 개방된 ADID를 동반하여 게이트웨이로 보낸다. 일단 VPN 게이트웨이가 App Container를 가지면, 이것을 인증을 위해 SAM 서버로 전달한다. 클라이언트는 완료를 기다린다. 만일 게이트웨이가 에러를 나타내면, 사용자에게 사용자의 언어로 상기시킬 것이다. 만일 모든 것이 Ok이면, VPN 소프트웨어는 작동을 시작한다.
Strong 인증 모듈(SAM)은 App Container 및 클라이언트의 ADID를 동반하여 VPN 게이트웨이로부터 인증요청을 수신한다. 이는 인덱스로써 ADID를 사용하여 Customer App Key와 카운터의 예상 값을 검색한다. 이는 Customer App Key를 사용하여 App Container를 개봉한다.
이는 카운터와 추가 정보를 체크한다. SAM은 일정 범위의 카운터를 허가하여야 한다. 만일 (Cexpeted <= Cactual < Cexpected + 10) 이면, 인증은 Ok일 것이다. 이것의 목적은 패킷이 클라이언트로부터 서버까지의 과정에서 분실될 경우(예를 들면, 사용자가 "재시도" 버튼을 수회 누르는 경우)를 다루기 위한 것이다.
만일 체크가 범위를 벗어나면, 에러가 발생한다. 이는 에러 코드와 에러 파라미터를 발송한다. 만일 성공이면, 이는 새로운 카운터를 기억하고, "인증 Ok" 메세지를 VPN 게이트웨이로 발송한다. 에러는 기록되고, 리포트는 주기적으로 시스템 관리자에게 제공된다. SAM은 누군가가 공격하려는 것을 나타내는 다수의 실패한 접속시도의 경우와 같이 특별한 환경에서는 관리자를 경고한다.
시스템(10)은 시스템 및/또는 시스템의 시크리트 키의 변조(corrupt) 또는 오용(misuse)를 야기시키는 신뢰할 수 없는 소프트웨어 애플리케이션의 제1 위협 모델에 대하여 방어하도록 설계되어 있다. SMI 및 기타 관련된 하드웨어 메카니즘을 이용하는 바람직한 실시예에서, 위협 모델은 확장되며, 시스템은 "링 제로(ring zero)"에서 운영되는 신뢰할 수 없는 프로그램, 특히 오퍼레이팅 시스템 그 자체의 일부에 대하여 키를 더욱 보호한다.
위협 모델, 공격 및 회복. 아래에는 확인된 위협, 그들의 범위 및 그들이 시스템(10)에 의해 어떻게 어드레스되는가의 다수의 논의가 있다.
App Key를 훔친 도청자. 도청자는 ARM/SAM 커뮤니케이션을 도청하여 App Key를 훔칠 수 있다. 그러나, 그는 클라이언트로 가장할 수는 없을 것인바, 왜냐하면 그는 적어도 Customer Secret 및 VPN 카운터의 최초 값을 또한 필요로 하기 때문이다.
도난된 App Key 및 Customer Secret. 해커가 App Key 및 Customer Secret를 훔친다고 가정하면, 이는 아마도 그가 회사내로 침입하여 ADID 데이터베이스 내의모든 데이터를 훔쳤기 때문이다. 만일 도난이 감지되면, 이는 머신을 재-등록하여 (비록 App Key는 변화하지 않지만) 새로운 Customer Secret을 생산해 냄으로써 해결될 수 있다. 만일 엔터프라이즈가 App Key를 보유하고 있다면, 다시 재등록할 필요가 없다.
위협 둔화. 하드웨어 기반 보안 체인은 본 발명의 바람직한 실시예가 단지 소프트웨어만의 실시예에 대하여는 존재하지 않는다는 것에 이익이 된다.
본 발명의 바람직한 실시예는 어떠한 소프트웨어 기반 리버스 엔지니어링 툴이 해킹할 수 없도록 설계된다. 게다가, 하드웨어 기반 공격은 적이 다른 물리적으로 원거리에 있는 머신을 크랙(crack)할 수 없도록 한다. 이러한 보호는 CPU의 시스템 관리 모드(System Management Mode, SMM)를 사용하여 얻어진다.
SMM 내로부터 소프트웨어의 다음 층(즉, 암호화 가능 BIOS를 사용하는 운영시스템 드라이버(Operating System Driver, OSD))은 위조(tampering)를 검증한다. 이 OSD 코드는 만들어진 위조-증거이다 - 이는 SMM 코드에 의해 감지되지 않고 위조된 애플리케이션이 이를 사용하게 하도록 개조될 수 없다. 이러한 검증된 운영 시스템 드라이버는 다시 애플리케이션이 개조되지 않았음을 체크한다.
마스터 키의 안전 기억 위치가 사용가능하지 않을 때 또는 안전 기억 메카니즘이 사용가능하나 모두에 대해 높은 레벨의 보증을 받지 못하였을 때 부속을 방지하기 위하여, 시크리트 마스터 키는 복수의 위치에 기억되는 세어(share)로 나누어질 수 있다. 또한 단지 제한된 수의 세어만이 샤미르의 시크리트 세어링 설계(shamir's secret sharing scheme)를 사용하여 시크리트 마스터 키를 복구하는데 필요할 뿐이다.
또한, 키 세어는 디바이스-설정 특성(예를 들면 드라이브 시리얼 넘버, 그래틱 카드 드라이버 버젼 등) 중 하나에 기초한 키를 사용하여 암호화될 수 있다. 디바이스 특성 키가 작거나 예측가능하면, 암호화는 반복 암호화 작동을 사용하여 키의 크기에 기초하여 복호화하는데 많은 시간이 소요되도록 선택되어진다.
시크리트 마스터 키 세어는 시크리트 마스터 키가 요구되는 각각의 시간마다 다시 결합된다. 결합된 시크리트 마스터 키는 메모리에서 포인터로 참조되는데, 이 포인터는 각각의 결합점에서 새로운 메모리 위치를 참조한다. 시크리트 마스터 키 조각이 결합되는 각각의 시간에, 조각의 일부가 불량인지를 살피기 위해 체크가 이루어진다. 디바이스-설정 정보의 종전 값을 추적하는 것은 불량 세어를 감지할 수 있게 한다. 무효화된 세어의 경우 시크리트 마스터 키는 다시 세어된다.
SMK / 장치 설정. 본 발명의 소프트웨어만의 실시예의 요건 중 하나는 마스터 키 및 그 App Container를 새로운 머신으로 이동시키려는 시도가 있었을 때 감지하는 능력이다. 이러한 이동을 감지하기 위해서, 머신의 일정 특성이 기록된다. 이러한 특성 중 몇몇이 동시에 바뀔 때, 소프트웨어만의 시스템(10)은 이를 감지하여 이에 따라 동작한다.
제한된 마스터 키 및 세션 키 노출. 설계는 어떠한 작동에 사용될 때 시크리트 마스터 키 및 세션 키의 노출을 제한한다. 바람직한 실시예에서, 모든 그러한 작동은 SMM 외부에서 실행될 때에는 사용불가능한 메모리를 사용하여 SMM 내에서 행하여진다.
공개 키 보전성. 단순한 실시예에서는, 공개 키가 포함되고 운영 시스템 드라이버로 컴파일된다. 이들은 바이오스에 포함되는 공개 키와 동일하다.
VPN 클라이언트와 TCP/IP 스택의 인터랙션은 다음과 같다. 클라이언트 VPN은 다음과 같은 서비스에 대해 책임이 있다: VPN 클라이언트의 구성, VPN 게이트웨이의 인증, 그리고 내부 엔터프라이즈 네트워크에 보내진 패킷의 암호화. VPN 클라이언트의 주 업무는, 일단 로그인 프로세스가 완료되면, 네트워크에 전송된 패킷을 검사하여, 통상 인터넷 머신을 향하고 있는지 또는 엔터프라이즈-네트워크를 향하고 있는지를 알아내는 것이다.
클라이언트는 지정 IP 어드레스를 검사한다. 만일 패킷이 인터넷 내의 머신에 관한 것이면, 이는 개조없이 진행한다. 만일 패킷이 VPN 게이트웨이 뒤의 엔터프라이즈 네트워크에 관한 것이면, 클라이언트는 이를 암호화하여 (때때로) 일종의 어드레스 변환을 실행한다.
클라이언트 스택은 다음과 같은 층 구조이다: TCP 스택 / UDP 스택, NDIS 인터페이스(셋업이 이를 형성한다), IPSec(통상 DES 및 3DES를 사용하며, 몇몇의 최초 교섭후 대칭으로 설립됨), 그리고 다시 NDIS. 패킷을 수신하는 VPN 게이트웨이는 암호를 해제할 것이며, 그들이 네트워크 내로 확실하게 있게 된다.
SPEKE를 사용하는 바람직한 실시예에서, 클라이언트 및 게이트웨이 양자는 인증된 사용자 확인과 관련된 새로운 키를 생성한다. 이 키는 VPN 세션 키로의 인증 행위의 설정을 강화하는데 사용된다.
위 설명의 복수의 위치에서, 본 발명의 아키텍쳐 내에서 사용될 수 있는 다양한 변형이 기술되었다. 이는 (1) 사용자를 장치에 설정하는 것으로, 이는 사용자와 디바이스의 유효한 구체적 조합을 정의하기 위한 강화된 정책을 사용하는 것, (2) 클라이언트와 게이트웨이 사이에, 게이트웨이와 인증 서버 사이에, 그리고 인증 서버와 strong 인증 모듈 사이에 패스워드를 암호화하는 것, (3) 로그인 카운터를 사용하는 대신에 도전(challenge)/응답 메카니즘을 사용하는 것, 그리고 (4) 클라이언트 인스톨을 웹사이트로부터 인스톨될 수 있는 통합 패키지 내에 포장하는 것을 포함한다.
따라서, 컴퓨터 디바이스 인증을 제공하는 시스템과 방법이 개시되었다. 상술한 실시예는 본 발명의 원리의 응용예를 나타내는 다수의 구체적인 실시예의 일종의 예시일 뿐이다. 명백히, 다수의 기타 배열이 발명의 범위를 벗어나지 아니하고 당업자들에 의해 쉽게 고안될 수 있을 것이다.
본원발명은 디바이스 애플리케이션 소프트웨어의 네트워크 인증을 위해 강력한 암호 식별을 제공하며, 시스템에 부가된 하드웨어를 최소화하며 높은 보증을 제공한다. 또한 본원발명은 상품성의 상업용 개인 컴퓨터에서 발견되는 것이 아닌 하드웨어를 더 이상 필요로 하지 않는 컴퓨터 디바이스 인증을 가능하게 하는 시스템을 제공한다. 한편, 본원발명은 보안 커널의 구현에 있어서 트러스트의 확보와 분석 처리를 용이하게 하기 위해, 애플리케이션과 운영 시스템로부터 분리된 도메인에서 작동하는 소형 보안 커널을 제공하며, 보안 커널 기능을 요구하는 프로그램의 확실성과 완전성을 확보하기 위해 보안 커널이 운영 시스템(OS)의 메모리와 애플리케이션 프로그램(애플리케이션)에의 접근할 수 있도록 한다.
(표 1)
(표 2)
(표 3)
(표 4)
(표 5)
(표 6)
(표 7)
(표 8)
(표 9)
(표 10)
(표 11)
(표 12)
(표 13)
(표 14)
(표 15)

Claims (25)

  1. 마스터 암호화 키를 사용하여 마스터 암호화 키로의 액세스를 보호하기 위한 시스템에 있어서,
    비휘발성 기억장치;
    시스템 초기화 과정동안 비휘발성 기억장치로부터 마스터 키를 읽고, 마스터 키로부터 유래한 기밀값을 숨은 기억 위치에 쓰고, 시스텀 초기화 과정의 다음 개시시까지 상기 시스템에서 실행되는 어떤 프로그램에 의해 비휘발성 기억장치로의 액세스를 디스에이블하는 시스템 초기화 과정;
    상기 시스템의 정상 작동 모드에서 실행되는 프로그램에 의해 숨은 기억 위치로의 액세스를 방지하는 수단; 및
    상기 시스템의 제한된 작동 모드에서 실행되는 프로그램에 의해 숨은 기억 위치로의 액세스를 허용하는 수단;을 포함하는 것을 특징으로 하는 시스템.
  2. 제 1 항에 있어서, 기밀 데이터는 마스터 키인 것을 특징으로 하는 시스템.
  3. 제 1 항에 있어서, 기밀 데이터는 마스터 키로부터 유래한 것을 특징으로 하는 시스템.
  4. 제 3 항에 있어서, 기밀 데이터는 마스터 키로 암호화되어 디스크상에 기억된 암호화 데이터로부터 검색된 제2 키인 것을 특징으로 하는 시스템.
  5. 제 1 항에 있어서, BIOS ROM내의 소프트웨어가 파워-온 또는 리셋 신호에 응답하여 시작되는 시스템 초기화 과정동안 상기 시스템을 제어하는 것을 특징으로 하는 시스템.
  6. 제 1 항에 있어서,
    상기 비휘발성 기억장치는 래치에 의해 제어되는 읽기 및 쓰기 액세스를 구비하는 비휘발성 랜덤 액세스 메모리이고,
    상기 래치는 파워-온 또는 리셋 이벤트에 응하는 하드웨어 함수로 인하여 시스템 초기화 과정의 개시시에 개방되어, 비휘발성 랜덤 액세스 메모리로의 시스템 액세스를 가능하게 하고,
    상기 래치는 시스템 초기화 과정동안 폐쇄되어, 시스템 초기화의 다음 개시시까지 비휘발성 랜덤 액세스 메모리로의 시스템 액세스를 거부하는 것을 특징으로 하는 시스템.
  7. 제 1 항에 있어서,
    상기 숨은 기억 장치는 상기 시스템의 정상 작동 모드에서 실행되는 어떠한 프로그램에 의해서도 액세스될 수 없는 시스템 관리 랜덤 액세스 메모리이며,
    상기 제한된 작동 모드는 시스템 관리 랜덤 액세스 메모리로의 액세스가 허용되는 시스템 관리 모드인 것을 특징으로 하는 시스템.
  8. 제 1 항에 있어서,
    상기 숨은 기억 장치는 다만 운영 시스템에 의한 액세스에 대해 제한되고, 상기 시스템의 정상 작동 모드에서 실행되는 어떠한 애플리케이션 프로그램에 의해서도 액세스될 수 없으며,
    상기 제한된 작동 모드는 운영 시스템 소프트웨어에 의한 사용을 위해 보류된 CPU 보호 링에 의해 제어되는 것을 특징으로 하는 시스템.
  9. 마스터 암호화 키를 기억장치내에 숨기는 시스템에 있어서,
    비휘발성 기억장치로부터 마스터 키를 읽고, 다음 시스템 리셋시까지 액세스가 다시 가능하지 않도록 비휘발성 기억장치로의 액세스를 폐쇄하고, 마스터 키로부터 유래한 기밀 데이터를 숨은 어드레스 공간에 쓰기하는 파워-온 소프트웨어를 포함하고,
    상기 시스템의 제한된 작동 모드에서 실행되는 프로그램만이 숨은 어드레스 공간내의 기밀 데이터로 액세스할 수 있는 것을 특징으로 하는 시스템.
  10. 암호화 키의 가용성을 애플리케이션에 제한함으로써, 애플리케이션에 대한 데이터로의 읽기 및 쓰기 액세스를 제어하는 방법에 있어서,
    마스터 키;
    상기 애플리케이션이 액세스하기를 원하는 데이터의 밀봉 또는 개봉된 형식을 보유하는 애플리케이션 컨테이너;
    암호화 변환을 컴퓨팅하기 위하여 호출 애플리케이션을 구성하는 일부 바이트의 암호화 다이제스트를 수행하는 암호화 게이트키핑 모듈; 및
    데이터를 밀봉하는 것이 완전성 체크 정보를 언제 추가하는지 또는 애플리케이션이 주어진 애플리케이션 컨테이너내의 데이터를 개봉하도록 허용하는지 여부를 결정하기 위하여 마스터 키, 및 애플리케이션 컨테이너와 암호화 변환을 조사하는 완전성-체크를 포함하는 암호화 프로세싱 모듈;을 포함하는 것을 특징으로 하는 방법.
  11. 제 10 항에 있어서,
    암호화 프로세싱 모듈에 의해 수행되고 적어도 마스터 키 및 암호화 변환으로부터 유래하는 키를 사용하여 애플리케이션 컨테이너내의 데이터를 복호화하는 프라이버시 방법을 포함하는 것을 특징으로 하는 방법.
  12. 제 10 항에 있어서,
    암호화 프로세싱 모듈에 의해 수행되고 적어도 마스터 키 및 암호화 변환으로부터 유래하는 키를 사용하여 애플리케이션 컨테이너내의 데이터를 암호화하는 프라이버시 방법을 더 포함하는 것을 특징으로 하는 방법.
  13. 제 12 항에 있어서, 상기 프라이버시 방법은 암호화가 수행되기전에 암호화 변환을 애플리케이션 컨테이너에 추가하는 것을 특징으로 하는 방법.
  14. 암호화 키의 가용성을 특정 디바이스상의 애플리케이션에 제한함으로써, 애플리케이션에 대한 데이터로의 액세스를 제어하는 방법에 있어서,
    암호화 프로세싱 모듈에 알려진 키;
    애플리케이션이 액세스하기를 원하는 데이터의 암호화적으로 밀봉된 형식을 포함하는 애플리케이션 컨테이너 데이터 구조;
    애플리케이션-레벨 프로그램과 암호화 프로세싱 모듈사이의 모든 액세스를 인터셉터하고, 암호화 서비스 또는 데이터를 액세스하기 위하여 시도하는 프로그램의 실행가능한 인-메모리 이미지의 일부 바이트를 조사하는 수단을 포함하고, 상기 애플리케이션의 암호화 변환을 컴퓨팅하기 위하여 호출 애플리케이션의 인-메모리 이미지의 일부 바이트의 암호화 다이제스트를 컴퓨팅하는 암호화 게이트키핑 함수; 및
    데이터를 밀봉하는 것이 완전성 체크 정보를 언제 추가하는지 또는 상기 애플리케이션이 주어진 애플리케이션 컨테이너 데이터 구조내의 데이터를 개봉하도록 허용되는지 여부를 결정하기 위하여 마스터 키, 및 애플리케이션 컨테이너 데이터 구조와 암호화 변환을 조사하는 암호화 프로세싱 모듈에 의해 수행되는 완전성-체크 방법;을 포함하는 것을 특징으로 하는 방법.
  15. 제 14 항에 있어서, 적어도 마스터 키와 암호화 변환으로부터 유래하는 키를 사용하여 애플리케이션 컨테이너 데이터 구조내의 데이터를 암호화 또는 복호화하는 암호화 프로세싱 모듈에 의해 수행되는 프라이버시 방법을 더 포함하고, 데이터가 암호화될 때 암호화가 수행되기전에 암호화 변환을 애플리케이션 컨테이너 데이터 구조에 선택적으로 추가하는 것을 특징으로 하는 방법.
  16. 제 14 항에 있어서, 상기 암호화 게이트키핑 함수는 상기 애플리케이션에 대하여 허용된 작동을 특정하는 권한 버퍼를 동시에 또는 이전에 부여받고, 요청 작동이 허용된 것을 확인하는 것을 특징으로 하는 방법.
  17. 제 14 항에 있어서, 상기 완전성-체크 방법은 암호화 변환 및 마스터 키로부터 암호화 변수를 유도하는 단계 또는 애플리케이션의 구성요소에 의해 선택된 암호화 변수, 암호화 변환 및 마스터키로부터 제2 암호화 변수를 유도하는 단계를 포함하고, 이러한 유도된 키는 애플리케이션 컨테이너 데이터 구조내에 기억된 메시지 인증 코드를 체크하기 위하여 사용되는 것을 특징으로 하는 방법.
  18. 제 14 항에 있어서, 상기 완전성-체크 방법은 마스터 키로부터 유래한 키를 사용하여 상기 애플리케이션 컨테이너 데이터 구조의 일부를 복호화하고, 그 결과값의 일부를 암호화 변환의 일부와 비교하는 단계 및 만약 그 두 부분이 같하면 액세스를 허용하는 단계를 포함하는 것을 특징으로 하는 방법.
  19. 제 14 항에 있어서, 프라이버시 단계는 암호화 변환, 마스터 키 및 선택적으로 다른 정보로부터 암호화 변수를 유도하는 단계 또는 암호화 변환, 마스터 키, 애플리케이션의 구성요소에 의해 선택된 암호화 변수, 및 선택적으로 다른 정보로부터 제2 암호화 변수를 유도하는 단계를 포함하고, 이러한 유도된 키는 애플리케이션 컨테이너 데이터 구조의 일부를 암호화 또는 복호화하기 위하여 사용되는 것을 특징으로 하는 방법.
  20. 제 19 항에 있어서, 키 유도는 종속값을 어떠한 순서로 연결시킴으로써 MD5, SHA1 또는 SHA-256 해시 함수의 하나 또는 그 이상의 애플리케이션으로 수행되는 것을 특징으로 하는 방법.
  21. 제 14 항에 있어서, 상기 암호화 프로세싱 모듈의 일부는 시스템 관리 인터럽트중에 실행되는 것을 특징으로 하는 방법.
  22. 디바이스 인증기관을 포함하는 또 다른 컴퓨팅 머신의 도움과 함께, 식별된 디바이스상의 식별된 애플리케이션을 인종 서버를 포함하는 또 다른 컴퓨팅 장치에 인증하는 방법은,
    (a)디바이스 인증기관으로 전송된 결과를 생성하는 디바이스상에서의 시스템 관리 인터럽션(SMI)동안 수행되는 제1 암호화 작동 단계, 및
    (b)디바이스 인증기관에 의해 발생되고 디바이스에 의해 수신되는 값을 프로세싱하는 디바이스상에서의 SMI 인터럽트동안 수행되는 제2 암호화 작동 단계를 포함하는 가입 프로세스;
    (a)인증 서버에 전송된 결과를 생성하는 디바이스에서의 SMI 인터럽션동안 수행되는 제1 암호화 작동 단계,
    (b)인증 서버에 의해 수행되고 인증 방법동안의 사용을 위해 기억된 암호화 변수를 생성하는 제2 암호화 작동 단계, 및
    (c)인증 서버에 의해 발생되고 디바이스에 의해 수신된 값을 프로세싱하는 디바이스에서의 SMI 인터럽트동안 수행되는 선택적 제3 암호화 작동 단계를 포함하는 등록 프로세스;
    (a)디바이스상의 SMI 인터럽션동안 수행되고, 인증 서버에 전송된 인증 데이터를 생성하는 제1 암호화 작동 단계, 및
    (b)인증의 결과를 결정하기 위하여 상기 등록 방법동안 기억된 암호화 변수를 적어도 사용하는 디바이스로부터 수신된 인증 데이터에 근거하여 인증 서버에 의해 수행되는 제2 암호화 작동 단계를 포함하는 인증 프로세스;를 포함하는 것을 특징으로 하는 방법.
  23. 식별된 디바이스상의 식별된 애플리케이션을 인증하기 위한 방법 또는 식별된 디바이스의 유저를 PASS 서버를 포함하는 또 다른 컴퓨팅 장치에 식별시키기 위한 제2 팩터를 제공하기 위한 방법에 있어서,
    (a)디바이스상에서 상기 애플리케이션과 암호적으로 관련된 애플리케이션 컨테이너 데이터 구조를 생성하기 위하여 디바이스 인증기관 및 인증 서버와의 통신을 수반하는 가입 방법을 수행하고,
    (b)인증 서버가 애플리케이션 컨테이너 데이터 구조용 암호화 변수를 기억하며 신용 정보를 기억하는 애플리케이션;
    (a)상기 신용 정보를 기억하는 애플리케이션 컨테이너 데이터 구조를 개봉하는 단계,
    (b)상기 신용 정보를 변경하는 단계,
    (c)상기 애플리케이션 컨테이너 데이터 구조를 재밀봉하는 단계,
    (d)식별하는 정보 및 적어도 재밀봉된 애플리케이션 컨테이너의 일부를 인증 서버에 전송하는 단계를 포함하는 인증 방법을 수행하는, 식별된 디바이스상에서 실행되는 애플리케이션;을 포함하고,
    적어도 상기 재밀봉 작동 부분은 상기 애플리케이션의 코드를 실행하는 동일한 CPU에서의 SMI동안 일어나며,
    인증 서버는,
    (a)식별하는 정보 및 적어도 애플리케이션 컨테이너 데이터 구조의 일부를 수신하고,
    (b)애플리케이션 컨테이너 데이터 구조를 개봉하기 위하여, 암호화 변수를 룩업 또는 컴퓨팅하는데 동일 정보를 사용하고,
    (c)개봉된 애플리케이션 컨테이너가 수용할 수 있는 값을 가지면, 특정 디바이스상의 특정 애플리케이션이 인증된 것으로 간주되고,
    (d)애플리케이션 컨테이너 데이터 구조와 관련된 키를 기억하는 것을 특징으로 하는 방법.
  24. 인증, 프라이버시, 완전성, 권한인정, 감사, 또는 디지털 권리 관리를 위한 디바이스상에서 하나 이상의 가상 토큰을 생성하여 이용하는 방법에 있어서,
    각 종류의 가상 토큰을 위한 애플리케이션;
    특정한 종류의 각 가상 토큰을 위한 애플리케이션 컨테이너;
    암호화 프로세싱 구성 요소의 암호화 서비스를 요청하는 호출 애플리케이션의 암호화 변환을 컴퓨팅하는 암호화 게이트키핑 구성요소;를 포함하고,
    여기서, 상기 암호화 게이트키핑 구성요소는 하나 이상의 수명이 긴 대칭 키를 인지하고,
    상기 암호화 프로세싱 구성요소는 상기 암호화 게이트키핑 구성요소를 경유하여 액세스되며,
    상기 암호화 프로세싱 구성요소는 하나 이상의 수명이 긴 대칭 키 및 하나 이상의 수명이 긴 공개키를 인지하고,
    상기 암호화 프로세싱 구성요소는 애플리케이션 켄테이너 데이터 구조의 암호화 밀봉 및 개봉을 수행하며, 이러한 암호화 작동의 일부는 시스템 관리 인터럽트(SMI)동안 수행되며;
    여기서, 상기 암호화 프로세싱 구성요소는 암호화 프로세싱 및 암호화 변환값으로 로딩된 공개키를 사용하여, 애플리케이션 코드 또는 정적 데이터의 일부의 디지털 서명을 체킹함으로써 호출 애플리케이션의 완전성을 체크하고,
    암호화 변환값은 호출 애플리케이션의 인-메모리 이미지 일부의 최근 컴퓨팅된 암호화 해시를 포함하고,
    상기 암호화 게이트키핑 및 암호화 프로세싱 구성요소는
    (a)마스터 키와 암호화 변환으로부터 애플리케이션 컨테이너 데이터 구조를 개봉하기 위한 키를 유도하고,
    (b)애플리케이션 컨테이너 데이터 구조상의 메시지 인증 코드를 체크하기 위하여 상기 유도된 키를 사용하며, 상기 메시지 인증 코드가 정확하면 에러를 리턴하고,
    (c)애플리케이션 컨테이너 데이터 구조내의 데이터를 복호화하기 위하여 상기 유도 키를 사용하며, 그것을 상기 애플리케이션으로 리턴하는 것을 특징으로 하는 방법.
  25. 비밀키와 디바이스와 관련된 애플리케이션을 안전하게 연결시키는 방법에 있어서,
    상기 디바이스와 관련된 대칭 키에 의해 보증된 비밀 키를 포함하는 애플리케이션 컨테이너를 생성하는 단계를 포함하는 것을 특징으로 하는 방법.
KR1020010074846A 2001-04-09 2001-11-29 컴퓨팅 디바이스의 보안을 위한 방법 및 시스템 KR100879907B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/829,074 2001-04-09
US09/829,074 US20030037237A1 (en) 2001-04-09 2001-04-09 Systems and methods for computer device authentication

Publications (2)

Publication Number Publication Date
KR20020079349A true KR20020079349A (ko) 2002-10-19
KR100879907B1 KR100879907B1 (ko) 2009-01-21

Family

ID=25253451

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020010074846A KR100879907B1 (ko) 2001-04-09 2001-11-29 컴퓨팅 디바이스의 보안을 위한 방법 및 시스템

Country Status (5)

Country Link
US (2) US20030037237A1 (ko)
JP (1) JP2002312242A (ko)
KR (1) KR100879907B1 (ko)
CN (2) CN1273901C (ko)
TW (1) TW589569B (ko)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030087873A (ko) * 2002-05-10 2003-11-15 주식회사 마이엔진 컴퓨팅 장치의 인증/접근 제어에 사용되는 중요 상수값의보안 방법 및 그를 이용한 인증/접근 제어 방법
KR100767153B1 (ko) * 2005-09-05 2007-10-15 캐논 가부시끼가이샤 복수의 유저가 동시에 로그인 가능한 정보 처리 장치 및 그제어 방법
KR100843701B1 (ko) * 2006-11-07 2008-07-04 소프트캠프(주) 콜 스택에 기록된 정보를 이용한 에이피아이 확인방법
US8181040B2 (en) 2003-08-26 2012-05-15 Panasonic Corporation Program execution device
WO2013066016A1 (ko) * 2011-11-04 2013-05-10 주식회사 케이티 신뢰관계 형성 방법 및 이를 위한 내장 uⅰcc
KR20130049726A (ko) * 2011-11-04 2013-05-14 주식회사 케이티 신뢰관계 형성 방법 및 이를 위한 내장 uⅰcc
KR101524387B1 (ko) * 2010-11-15 2015-05-29 제말토 에스에이 데이터를 휴대용 보안 토큰에 로딩하는 방법
KR20160147903A (ko) * 2014-04-28 2016-12-23 에이알엠 아이피 리미티드 액세스 제어 및 코드 스케줄링
KR101878682B1 (ko) * 2011-11-14 2018-07-18 삼성전자주식회사 컨텐츠를 보호하기 위한 방법 및 저장 매체
KR20190007572A (ko) * 2017-07-12 2019-01-23 덕성여자대학교 산학협력단 사물인터넷 환경에서의 비밀키 설정 및 상호 기기 인증 방법
CN113904848A (zh) * 2021-10-09 2022-01-07 天翼物联科技有限公司 物联网终端的证书与密钥下载方法及系统
CN114282250A (zh) * 2021-12-28 2022-04-05 航天科工智能运筹与信息安全研究院(武汉)有限公司 一种模型容器加密与部署系统
CN116055032A (zh) * 2022-05-11 2023-05-02 荣耀终端有限公司 一种密钥生成方法及电子设备
US12019789B2 (en) 2003-08-26 2024-06-25 Panasonic Holdings Corporation Program execution device

Families Citing this family (405)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7058822B2 (en) 2000-03-30 2006-06-06 Finjan Software, Ltd. Malicious mobile code runtime monitoring system and methods
US9219755B2 (en) 1996-11-08 2015-12-22 Finjan, Inc. Malicious mobile code runtime monitoring system and methods
US8079086B1 (en) 1997-11-06 2011-12-13 Finjan, Inc. Malicious mobile code runtime monitoring system and methods
US7103574B1 (en) * 1999-03-27 2006-09-05 Microsoft Corporation Enforcement architecture and method for digital rights management
EP1056010A1 (en) 1999-05-28 2000-11-29 Hewlett-Packard Company Data integrity monitoring in trusted computing entity
EP1055990A1 (en) 1999-05-28 2000-11-29 Hewlett-Packard Company Event logging in a computing platform
DE10154723A1 (de) * 2000-11-10 2002-10-31 Parker Hannifin Corp Axialkolbenpumpe mit interner Vorverdichtung
GB2376763B (en) * 2001-06-19 2004-12-15 Hewlett Packard Co Demonstrating integrity of a compartment of a compartmented operating system
GB2372594B (en) * 2001-02-23 2004-10-06 Hewlett Packard Co Trusted computing environment
GB2372595A (en) * 2001-02-23 2002-08-28 Hewlett Packard Co Method of and apparatus for ascertaining the status of a data processing environment.
GB2372592B (en) 2001-02-23 2005-03-30 Hewlett Packard Co Information system
US7068998B2 (en) * 2001-04-13 2006-06-27 Northrop Grumman Corp. Methodology for the detection of intrusion into radio frequency (RF) based networks including tactical data links and the tactical internet
US8218555B2 (en) * 2001-04-24 2012-07-10 Nvidia Corporation Gigabit ethernet adapter
KR100813944B1 (ko) * 2001-07-11 2008-03-14 삼성전자주식회사 디지털 권리 운영을 수행하기 위하여 휴대용 기기와컴퓨터 사이의 통신을 제어하는 방법
US7577250B2 (en) * 2004-08-12 2009-08-18 Cmla, Llc Key derivation functions to enhance security
GB2378013A (en) * 2001-07-27 2003-01-29 Hewlett Packard Co Trusted computer platform audit system
US7181530B1 (en) * 2001-07-27 2007-02-20 Cisco Technology, Inc. Rogue AP detection
EP1282023A1 (en) * 2001-07-30 2003-02-05 Hewlett-Packard Company Trusted platform evaluation
GB2378272A (en) * 2001-07-31 2003-02-05 Hewlett Packard Co Method and apparatus for locking an application within a trusted environment
FR2829645A1 (fr) * 2001-09-10 2003-03-14 St Microelectronics Sa Protocole d'authentification a verification d'integrite de memoire
US20030053630A1 (en) * 2001-09-20 2003-03-20 International Business Machines Corporation Method and system for key usage control in an embedded security system
US7844683B2 (en) * 2001-10-10 2010-11-30 Juniper Networks, Inc. String matching method and device
US20030144970A1 (en) * 2001-12-10 2003-07-31 Coyne Patrick J. Project management database and method of managing project related information
US8935297B2 (en) * 2001-12-10 2015-01-13 Patrick J. Coyne Method and system for the management of professional services project information
US7562232B2 (en) * 2001-12-12 2009-07-14 Patrick Zuili System and method for providing manageability to security information for secured items
US7783765B2 (en) * 2001-12-12 2010-08-24 Hildebrand Hal S System and method for providing distributed access control to secured documents
US7921288B1 (en) * 2001-12-12 2011-04-05 Hildebrand Hal S System and method for providing different levels of key security for controlling access to secured items
US7930756B1 (en) 2001-12-12 2011-04-19 Crocker Steven Toye Multi-level cryptographic transformations for securing digital assets
US7921284B1 (en) 2001-12-12 2011-04-05 Gary Mark Kinghorn Method and system for protecting electronic data in enterprise environment
US10033700B2 (en) 2001-12-12 2018-07-24 Intellectual Ventures I Llc Dynamic evaluation of access rights
US7631184B2 (en) * 2002-05-14 2009-12-08 Nicholas Ryan System and method for imposing security on copies of secured items
USRE41546E1 (en) 2001-12-12 2010-08-17 Klimenty Vainstein Method and system for managing security tiers
US7178033B1 (en) 2001-12-12 2007-02-13 Pss Systems, Inc. Method and apparatus for securing digital assets
US10360545B2 (en) 2001-12-12 2019-07-23 Guardian Data Storage, Llc Method and apparatus for accessing secured electronic data off-line
US8006280B1 (en) 2001-12-12 2011-08-23 Hildebrand Hal S Security system for generating keys from access rules in a decentralized manner and methods therefor
US7565683B1 (en) * 2001-12-12 2009-07-21 Weiqing Huang Method and system for implementing changes to security policies in a distributed security system
US7260555B2 (en) 2001-12-12 2007-08-21 Guardian Data Storage, Llc Method and architecture for providing pervasive security to digital assets
US7921450B1 (en) 2001-12-12 2011-04-05 Klimenty Vainstein Security system using indirect key generation from access rules and methods therefor
US7380120B1 (en) 2001-12-12 2008-05-27 Guardian Data Storage, Llc Secured data format for access control
US8065713B1 (en) 2001-12-12 2011-11-22 Klimenty Vainstein System and method for providing multi-location access management to secured items
US7681034B1 (en) 2001-12-12 2010-03-16 Chang-Ping Lee Method and apparatus for securing electronic data
US7950066B1 (en) 2001-12-21 2011-05-24 Guardian Data Storage, Llc Method and system for restricting use of a clipboard application
US20030126453A1 (en) * 2001-12-31 2003-07-03 Glew Andrew F. Processor supporting execution of an authenticated code instruction
CA2369304A1 (en) * 2002-01-30 2003-07-30 Cloakware Corporation A protocol to hide cryptographic private keys
US8176334B2 (en) 2002-09-30 2012-05-08 Guardian Data Storage, Llc Document security system that permits external users to gain access to secured files
US20030177364A1 (en) * 2002-03-15 2003-09-18 Walsh Robert E. Method for authenticating users
AUPS169002A0 (en) * 2002-04-11 2002-05-16 Tune, Andrew Dominic An information storage system
US7487365B2 (en) * 2002-04-17 2009-02-03 Microsoft Corporation Saving and retrieving data based on symmetric key encryption
US7748045B2 (en) * 2004-03-30 2010-06-29 Michael Frederick Kenrich Method and system for providing cryptographic document retention with off-line access
US8613102B2 (en) * 2004-03-30 2013-12-17 Intellectual Ventures I Llc Method and system for providing document retention using cryptography
US20070253430A1 (en) * 2002-04-23 2007-11-01 Minami John S Gigabit Ethernet Adapter
US7366915B2 (en) * 2002-04-30 2008-04-29 Microsoft Corporation Digital license with referral information
US7203844B1 (en) 2002-06-20 2007-04-10 Oxford William V Method and system for a recursive security protocol for digital copyright control
US8438392B2 (en) * 2002-06-20 2013-05-07 Krimmeni Technologies, Inc. Method and system for control of code execution on a general purpose computing device and control of code execution in a recursive security protocol
JP4007873B2 (ja) * 2002-07-09 2007-11-14 富士通株式会社 データ保護プログラムおよびデータ保護方法
US7512810B1 (en) * 2002-09-11 2009-03-31 Guardian Data Storage Llc Method and system for protecting encrypted files transmitted over a network
US7426382B2 (en) * 2002-10-09 2008-09-16 Motorola, Inc. Contact validation and trusted contact updating in mobile wireless communications devices
US7836310B1 (en) 2002-11-01 2010-11-16 Yevgeniy Gutnik Security system that uses indirect password-based encryption
US7698550B2 (en) 2002-11-27 2010-04-13 Microsoft Corporation Native wi-fi architecture for 802.11 networks
US20040117318A1 (en) * 2002-12-16 2004-06-17 Grawrock David W. Portable token controlling trusted environment launch
US7890990B1 (en) 2002-12-20 2011-02-15 Klimenty Vainstein Security system with staging capabilities
US20040139198A1 (en) * 2003-01-15 2004-07-15 Jose Costa-Requena Method and apparatus for manipulating data with session initiation protocol
US7210034B2 (en) * 2003-01-30 2007-04-24 Intel Corporation Distributed control of integrity measurement using a trusted fixed token
US7379548B2 (en) * 2003-01-31 2008-05-27 Nds Limited Virtual smart card device, method and system
WO2004068493A1 (en) * 2003-01-31 2004-08-12 Nds Limited Virtual smart card device, method and system
US7017051B2 (en) * 2003-02-24 2006-03-21 Bea Systems, Inc. System and method for enterprise authentication
US7370212B2 (en) 2003-02-25 2008-05-06 Microsoft Corporation Issuing a publisher use license off-line in a digital rights management (DRM) system
US7574604B2 (en) * 2003-03-04 2009-08-11 Sony Corporation Network device registration
US20040257219A1 (en) * 2003-04-16 2004-12-23 Spiess David M. Computer security alert system
GB0310411D0 (en) * 2003-05-07 2003-06-11 Koninkl Philips Electronics Nv Electronic device provided with cryptographic circuit and method of establishing the same
US8095783B2 (en) 2003-05-12 2012-01-10 Phoenix Technologies Ltd. Media boot loader
US8707034B1 (en) 2003-05-30 2014-04-22 Intellectual Ventures I Llc Method and system for using remote headers to secure electronic files
US7475254B2 (en) * 2003-06-19 2009-01-06 International Business Machines Corporation Method for authenticating software using protected master key
US20050010752A1 (en) * 2003-06-23 2005-01-13 Nokia, Inc. Method and system for operating system anti-tampering
US7730543B1 (en) 2003-06-30 2010-06-01 Satyajit Nath Method and system for enabling users of a group shared across multiple file security systems to access secured files
JP4600772B2 (ja) * 2003-07-14 2010-12-15 ソニー株式会社 サービス利用方法、サービス利用装置及びサービス利用プログラム、並びに管理方法、管理装置及び管理プログラム
US7590837B2 (en) * 2003-08-23 2009-09-15 Softex Incorporated Electronic device security and tracking system and method
US8127366B2 (en) * 2003-09-30 2012-02-28 Guardian Data Storage, Llc Method and apparatus for transitioning between states of security policies used to secure electronic documents
US7703140B2 (en) * 2003-09-30 2010-04-20 Guardian Data Storage, Llc Method and system for securing digital assets using process-driven security policies
US20050086531A1 (en) * 2003-10-20 2005-04-21 Pss Systems, Inc. Method and system for proxy approval of security changes for a file security system
US20050091494A1 (en) * 2003-10-23 2005-04-28 Hyser Chris D. Method and system for providing an external trusted agent for one or more computer systems
US8037515B2 (en) 2003-10-29 2011-10-11 Qualcomm Incorporated Methods and apparatus for providing application credentials
CH716409B1 (de) * 2003-11-12 2021-01-29 Legic Identsystems Ag Verfahren zum Einschreiben einer Datenorganisation in Identifikationsmedien und zum Einschreiben und Ausführen von Applikationen in der Datenorganisation.
US20050129244A1 (en) * 2003-12-16 2005-06-16 International Business Machines Corporation System and method for mitigating denial of service attacks on trusted platform
US20050137889A1 (en) * 2003-12-18 2005-06-23 Wheeler David M. Remotely binding data to a user device
US20050138371A1 (en) * 2003-12-19 2005-06-23 Pss Systems, Inc. Method and system for distribution of notifications in file security systems
US8176545B1 (en) * 2003-12-19 2012-05-08 Nvidia Corporation Integrated policy checking system and method
US7702909B2 (en) * 2003-12-22 2010-04-20 Klimenty Vainstein Method and system for validating timestamps
US20050182971A1 (en) * 2004-02-12 2005-08-18 Ong Peng T. Multi-purpose user authentication device
US20050182925A1 (en) * 2004-02-12 2005-08-18 Yoshihiro Tsukamura Multi-mode token
US7802085B2 (en) * 2004-02-18 2010-09-21 Intel Corporation Apparatus and method for distributing private keys to an entity with minimal secret, unique information
US20050232580A1 (en) * 2004-03-11 2005-10-20 Interdigital Technology Corporation Control of device operation within an area
KR100636906B1 (ko) * 2004-03-22 2006-10-19 엘지전자 주식회사 미디 재생 장치 그 방법
US7653727B2 (en) * 2004-03-24 2010-01-26 Intel Corporation Cooperative embedded agents
US20050213768A1 (en) * 2004-03-24 2005-09-29 Durham David M Shared cryptographic key in networks with an embedded agent
US8539608B1 (en) * 2004-03-25 2013-09-17 Verizon Corporate Services Group Inc. Integrity checking at high data rates
US9003548B2 (en) 2004-04-13 2015-04-07 Nl Systems, Llc Method and system for digital rights management of documents
US7330981B2 (en) * 2004-04-23 2008-02-12 Microsoft Corporation File locker and mechanisms for providing and using same
US20060242406A1 (en) 2005-04-22 2006-10-26 Microsoft Corporation Protected computing environment
US7765600B2 (en) * 2004-05-04 2010-07-27 General Instrument Corporation Methods and apparatuses for authorizing features of a computer program for use with a product
DE102004024648A1 (de) * 2004-05-18 2005-12-22 Siemens Ag Verfahren zur Authentifizierung einer Kommunikationseinheit
US7774824B2 (en) * 2004-06-09 2010-08-10 Intel Corporation Multifactor device authentication
US7526792B2 (en) * 2004-06-09 2009-04-28 Intel Corporation Integration of policy compliance enforcement and device authentication
US7475431B2 (en) * 2004-06-10 2009-01-06 International Business Machines Corporation Using security levels to improve permission checking performance and manageability
US20060005031A1 (en) * 2004-06-15 2006-01-05 Apostolopoulos John G Methods and systems for utilizing a single cryptographic integrity check to generate multiple cryptographic integrity check values for components of transcodable content
US20050289311A1 (en) 2004-06-29 2005-12-29 David Durham System and method for secure inter-platform and intra-platform communications
US20060005015A1 (en) * 2004-06-30 2006-01-05 David Durham System and method for secure inter-platform and intra-platform communications
US7571329B2 (en) * 2004-07-14 2009-08-04 Intel Corporation Method of storing unique constant values
US7697691B2 (en) * 2004-07-14 2010-04-13 Intel Corporation Method of delivering Direct Proof private keys to devices using an on-line service
US7693286B2 (en) * 2004-07-14 2010-04-06 Intel Corporation Method of delivering direct proof private keys in signed groups to devices using a distribution CD
US7792303B2 (en) * 2004-07-14 2010-09-07 Intel Corporation Method of delivering direct proof private keys to devices using a distribution CD
US7707427B1 (en) * 2004-07-19 2010-04-27 Michael Frederick Kenrich Multi-level file digests
US8661420B2 (en) * 2004-08-03 2014-02-25 Oracle International Corporation System and method for runtime interface versioning
KR20130014623A (ko) 2004-08-12 2013-02-07 씨엠엘에이 엘엘씨 보안성을 향상시키는 순열 데이터 변환
US7664109B2 (en) * 2004-09-03 2010-02-16 Microsoft Corporation System and method for distributed streaming of scalable media
US7711952B2 (en) * 2004-09-13 2010-05-04 Coretrace Corporation Method and system for license management
US7561515B2 (en) * 2004-09-27 2009-07-14 Intel Corporation Role-based network traffic-flow rate control
JP4411173B2 (ja) * 2004-09-30 2010-02-10 富士通株式会社 コンピュータシステムの管理方法およびコンピュータ管理システムおよびコンピュータ管理プログラム
US8347078B2 (en) * 2004-10-18 2013-01-01 Microsoft Corporation Device certificate individualization
US20060089917A1 (en) * 2004-10-22 2006-04-27 Microsoft Corporation License synchronization
US7594269B2 (en) * 2004-10-29 2009-09-22 Intel Corporation Platform-based identification of host software circumvention
US7502928B2 (en) * 2004-11-12 2009-03-10 Sony Computer Entertainment Inc. Methods and apparatus for secure data processing and transmission
US8176564B2 (en) * 2004-11-15 2012-05-08 Microsoft Corporation Special PC mode entered upon detection of undesired state
US8336085B2 (en) 2004-11-15 2012-12-18 Microsoft Corporation Tuning product policy using observed evidence of customer behavior
US8464348B2 (en) * 2004-11-15 2013-06-11 Microsoft Corporation Isolated computing environment anchored into CPU and motherboard
US20060107323A1 (en) * 2004-11-16 2006-05-18 Mclean Ivan H System and method for using a dynamic credential to identify a cloned device
US20060137018A1 (en) * 2004-11-29 2006-06-22 Interdigital Technology Corporation Method and apparatus to provide secured surveillance data to authorized entities
US7457960B2 (en) * 2004-11-30 2008-11-25 Analog Devices, Inc. Programmable processor supporting secure mode
US8924728B2 (en) * 2004-11-30 2014-12-30 Intel Corporation Apparatus and method for establishing a secure session with a device without exposing privacy-sensitive information
US20060227640A1 (en) * 2004-12-06 2006-10-12 Interdigital Technology Corporation Sensing device with activation and sensing alert functions
TWI285742B (en) * 2004-12-06 2007-08-21 Interdigital Tech Corp Method and apparatus for detecting portable electronic device functionality
US7574220B2 (en) * 2004-12-06 2009-08-11 Interdigital Technology Corporation Method and apparatus for alerting a target that it is subject to sensing and restricting access to sensed content associated with the target
US7818585B2 (en) * 2004-12-22 2010-10-19 Sap Aktiengesellschaft Secure license management
US7895124B2 (en) * 2004-12-23 2011-02-22 International Business Machines Corporation Method for protecting sensitive data during execution
US7480761B2 (en) * 2005-01-10 2009-01-20 Microsoft Corporation System and methods for an overlay disk and cache using portable flash memory
US7770205B2 (en) * 2005-01-19 2010-08-03 Microsoft Corporation Binding a device to a computer
US7600256B2 (en) * 2005-02-04 2009-10-06 Microsoft Corporation Security critical data containers
US9300641B2 (en) * 2005-02-11 2016-03-29 Nokia Corporation Method and apparatus for providing bootstrapping procedures in a communication network
US20060198515A1 (en) * 2005-03-03 2006-09-07 Seagate Technology Llc Secure disc drive electronics implementation
US8086853B2 (en) * 2005-03-18 2011-12-27 Microsoft Corporation Automatic centralized authentication challenge response generation
US7890634B2 (en) 2005-03-18 2011-02-15 Microsoft Corporation Scalable session management
EP2194476B1 (en) 2005-03-22 2014-12-03 Hewlett-Packard Development Company, L.P. Method and apparatus for creating a record of a software-verification attestation
US20060218649A1 (en) * 2005-03-22 2006-09-28 Brickell Ernie F Method for conditional disclosure of identity information
US8438645B2 (en) 2005-04-27 2013-05-07 Microsoft Corporation Secure clock with grace periods
US7779462B2 (en) * 2005-04-11 2010-08-17 Microsoft Corporation Switching an application, user and security context based on device orientation
US7469362B2 (en) * 2005-04-15 2008-12-23 Microsoft Corporation Using a call stack hash to record the state of a process
US8725646B2 (en) 2005-04-15 2014-05-13 Microsoft Corporation Output protection levels
US9363481B2 (en) 2005-04-22 2016-06-07 Microsoft Technology Licensing, Llc Protected media pipeline
US9436804B2 (en) 2005-04-22 2016-09-06 Microsoft Technology Licensing, Llc Establishing a unique session key using a hardware functionality scan
WO2006115532A2 (en) * 2005-04-22 2006-11-02 Microsoft Corporation Renewable and individualizable elements of a protected computing environment
US20060265758A1 (en) 2005-05-20 2006-11-23 Microsoft Corporation Extensible media rights
CN100358050C (zh) * 2005-05-25 2007-12-26 深圳兆日技术有限公司 一种防止存储器攻击的隐藏rom的方法
US8353046B2 (en) * 2005-06-08 2013-01-08 Microsoft Corporation System and method for delivery of a modular operating system
CA2510366C (en) * 2005-06-14 2013-02-26 Certicom Corp. System and method for remote device registration
US8639946B2 (en) * 2005-06-24 2014-01-28 Sigmatel, Inc. System and method of using a protected non-volatile memory
US7614082B2 (en) * 2005-06-29 2009-11-03 Research In Motion Limited System and method for privilege management and revocation
US7953980B2 (en) 2005-06-30 2011-05-31 Intel Corporation Signed manifest for run-time verification of software program identity and integrity
US20070006307A1 (en) * 2005-06-30 2007-01-04 Hahn Scott D Systems, apparatuses and methods for a host software presence check from an isolated partition
US7669242B2 (en) * 2005-06-30 2010-02-23 Intel Corporation Agent presence monitor configured to execute in a secure environment
US8839450B2 (en) 2007-08-02 2014-09-16 Intel Corporation Secure vault service for software components within an execution environment
US8677504B2 (en) 2005-07-14 2014-03-18 Qualcomm Incorporated Method and apparatus for encrypting/decrypting multimedia content to allow random access
KR100736047B1 (ko) * 2005-07-28 2007-07-06 삼성전자주식회사 무선 네트워크 장치 및 이를 이용한 인증 방법
US7895651B2 (en) * 2005-07-29 2011-02-22 Bit 9, Inc. Content tracking in a network security system
US8984636B2 (en) * 2005-07-29 2015-03-17 Bit9, Inc. Content extractor and analysis system
US8272058B2 (en) * 2005-07-29 2012-09-18 Bit 9, Inc. Centralized timed analysis in a network security system
US20070028291A1 (en) * 2005-07-29 2007-02-01 Bit 9, Inc. Parametric content control in a network security system
US8966284B2 (en) 2005-09-14 2015-02-24 Sandisk Technologies Inc. Hardware driver integrity check of memory card controller firmware
US20070067590A1 (en) * 2005-09-22 2007-03-22 Uday Savagaonkar Providing protected access to critical memory regions
US7748037B2 (en) * 2005-09-22 2010-06-29 Intel Corporation Validating a memory type modification attempt
US8239682B2 (en) 2005-09-28 2012-08-07 Nl Systems, Llc Method and system for digital rights management of documents
US20070097934A1 (en) * 2005-11-03 2007-05-03 Jesse Walker Method and system of secured direct link set-up (DLS) for wireless networks
US8183863B2 (en) * 2005-11-10 2012-05-22 Halliburton Energy Services, Inc. Displaced electrode amplifier
US7925801B2 (en) * 2006-01-17 2011-04-12 International Business Machines Corporation Method and system for protection and security of IO devices using credentials
US7624283B2 (en) * 2006-02-13 2009-11-24 International Business Machines Corporation Protocol for trusted platform module recovery through context checkpointing
US8214296B2 (en) * 2006-02-14 2012-07-03 Microsoft Corporation Disaggregated secure execution environment
US8473754B2 (en) 2006-02-22 2013-06-25 Virginia Tech Intellectual Properties, Inc. Hardware-facilitated secure software execution environment
WO2007119403A1 (ja) * 2006-03-16 2007-10-25 Matsushita Electric Industrial Co., Ltd. 端末装置
US7779252B2 (en) * 2006-03-21 2010-08-17 Harris Corporation Computer architecture for a handheld electronic device with a shared human-machine interface
US8014530B2 (en) 2006-03-22 2011-09-06 Intel Corporation Method and apparatus for authenticated, recoverable key distribution with no database secrets
US8041947B2 (en) * 2006-03-23 2011-10-18 Harris Corporation Computer architecture for an electronic device providing SLS access to MLS file system with trusted loading and protection of program execution memory
US8060744B2 (en) * 2006-03-23 2011-11-15 Harris Corporation Computer architecture for an electronic device providing single-level secure access to multi-level secure file system
US8127145B2 (en) * 2006-03-23 2012-02-28 Harris Corporation Computer architecture for an electronic device providing a secure file system
US20070226150A1 (en) * 2006-03-27 2007-09-27 Brent Pietrzak Distribution of digital licenses and software via license tokens
US9313248B2 (en) * 2006-04-13 2016-04-12 Johnny Stuart Epstein Method and apparatus for delivering encoded content
EP1850256B1 (en) * 2006-04-24 2010-06-09 Telefonaktiebolaget LM Ericsson (publ) Authorisation of the installation of a software version
FI20065288A (fi) * 2006-05-03 2007-11-04 Emillion Oy Autentikointi
US8032761B2 (en) 2006-05-09 2011-10-04 Broadcom Corporation Method and system for memory attack protection to achieve a secure interface
US8560829B2 (en) * 2006-05-09 2013-10-15 Broadcom Corporation Method and system for command interface protection to achieve a secure interface
US8285988B2 (en) * 2006-05-09 2012-10-09 Broadcom Corporation Method and system for command authentication to achieve a secure interface
US7979714B2 (en) * 2006-06-02 2011-07-12 Harris Corporation Authentication and access control device
US8826023B1 (en) * 2006-06-30 2014-09-02 Symantec Operating Corporation System and method for securing access to hash-based storage systems
WO2008030549A2 (en) * 2006-09-06 2008-03-13 Sslnext Inc. Method and system for providing authentication service for internet users
JP5186648B2 (ja) * 2006-09-27 2013-04-17 セキュアオース コーポレイション 安全なオンライン取引を容易にするシステム及び方法
US8127135B2 (en) * 2006-09-28 2012-02-28 Hewlett-Packard Development Company, L.P. Changing of shared encryption key
US8099789B2 (en) * 2006-09-29 2012-01-17 Lenovo (Singapore) Pte. Ltd. Apparatus and method for enabling applications on a security processor
US7882318B2 (en) * 2006-09-29 2011-02-01 Intel Corporation Tamper protection of software agents operating in a vitual technology environment methods and apparatuses
US7802050B2 (en) * 2006-09-29 2010-09-21 Intel Corporation Monitoring a target agent execution pattern on a VT-enabled system
US8245284B2 (en) * 2006-10-05 2012-08-14 Microsoft Corporation Extensible network discovery
US8190918B2 (en) * 2006-11-13 2012-05-29 Disney Enterprises, Inc. Interoperable digital rights management
US20080148046A1 (en) * 2006-12-07 2008-06-19 Bryan Glancey Real-Time Checking of Online Digital Certificates
US8370261B2 (en) * 2007-01-10 2013-02-05 Amnon Nissim System and a method for access management and billing
US20080263363A1 (en) * 2007-01-22 2008-10-23 Spyrus, Inc. Portable Data Encryption Device with Configurable Security Functionality and Method for File Encryption
JP2010517449A (ja) * 2007-01-26 2010-05-20 セーフネット インコーポレイテッド 信頼できない受信者における秘密の保護
US8254579B1 (en) * 2007-01-31 2012-08-28 Hewlett-Packard Development Company, L.P. Cryptographic key distribution using a trusted computing platform
US7831051B2 (en) * 2007-03-13 2010-11-09 Aladdin Europe Gmbh Secure communication between a hardware device and a computer
TWI402715B (zh) * 2007-03-23 2013-07-21 Via Tech Inc 應用程式保護系統及方法
WO2008137939A2 (en) 2007-05-07 2008-11-13 Archivas, Inc. Method for data privacy in a fixed content distributed data storage
KR20100031106A (ko) * 2007-05-22 2010-03-19 이르데토 비.브이. 데이터 보안
CA2590387A1 (en) * 2007-05-29 2008-11-29 Sal Khan A system and method for creating a virtual private network (vpn) over a computer network using multi-layered permissions-based access control
KR101495535B1 (ko) * 2007-06-22 2015-02-25 삼성전자주식회사 컨텐츠 디바이스의 폐기 여부를 확인하여 데이터를전송하는 전송 방법과 시스템, 데이터 서버
US7657722B1 (en) * 2007-06-30 2010-02-02 Cirrus Logic, Inc. Method and apparatus for automatically securing non-volatile (NV) storage in an integrated circuit
EP2168299A4 (en) 2007-07-17 2011-10-05 Certicom Corp METHOD OF COMPRESSING CRYPTOGRAPHIC VALUE
KR20100045482A (ko) * 2007-07-20 2010-05-03 빅풋 네트웍스, 인크. 클라이언트 인증 디바이스 및 이의 방법들
US8769291B2 (en) * 2007-07-23 2014-07-01 Red Hat, Inc. Certificate generation for a network appliance
CN100454324C (zh) * 2007-09-21 2009-01-21 武汉大学 一种可信机制上的嵌入式平台引导方法
US8724819B2 (en) * 2007-10-16 2014-05-13 Nokia Corporation Credential provisioning
US8099718B2 (en) 2007-11-13 2012-01-17 Intel Corporation Method and system for whitelisting software components
US8621027B2 (en) 2007-11-16 2013-12-31 Red Hat, Inc. Automatically providing identity information for a network appliance
US8191122B2 (en) * 2007-11-27 2012-05-29 Red Hat, Inc. Provisioning a network appliance
US8191123B2 (en) * 2007-11-27 2012-05-29 Red Hat, Inc. Provisioning a network appliance
US8532303B2 (en) 2007-12-14 2013-09-10 Intel Corporation Symmetric key distribution framework for the internet
US8474037B2 (en) 2008-01-07 2013-06-25 Intel Corporation Stateless attestation system
US8266707B2 (en) 2008-02-28 2012-09-11 Intel Corporation Tamper resistant method, apparatus and system for secure portability of digital rights management-protected content
US8855318B1 (en) * 2008-04-02 2014-10-07 Cisco Technology, Inc. Master key generation and distribution for storage area network devices
US8352740B2 (en) * 2008-05-23 2013-01-08 Microsoft Corporation Secure execution environment on external device
US7522723B1 (en) * 2008-05-29 2009-04-21 Cheman Shaik Password self encryption method and system and encryption by keys generated from personal secret information
US20100031316A1 (en) * 2008-07-30 2010-02-04 International Business Machines Corporation System access log monitoring and reporting system
US8510352B2 (en) 2008-10-24 2013-08-13 Microsoft Corporation Virtualized boot block with discovery volume
US20100106977A1 (en) * 2008-10-24 2010-04-29 Jan Patrik Persson Method and Apparatus for Secure Software Platform Access
US8661056B1 (en) * 2008-11-03 2014-02-25 Salesforce.Com, Inc. System, method and computer program product for publicly providing web content of a tenant using a multi-tenant on-demand database service
US20100153709A1 (en) * 2008-12-10 2010-06-17 Qualcomm Incorporated Trust Establishment From Forward Link Only To Non-Forward Link Only Devices
US8364601B2 (en) * 2008-12-31 2013-01-29 Intel Corporation Methods and systems to directly render an image and correlate corresponding user input in a secure memory domain
US8768843B2 (en) 2009-01-15 2014-07-01 Igt EGM authentication mechanism using multiple key pairs at the BIOS with PKI
US8417969B2 (en) * 2009-02-19 2013-04-09 Microsoft Corporation Storage volume protection supporting legacy systems
US8073886B2 (en) 2009-02-20 2011-12-06 Microsoft Corporation Non-privileged access to data independent of filesystem implementation
US9037844B2 (en) 2009-02-27 2015-05-19 Itron, Inc. System and method for securely communicating with electronic meters
US9588803B2 (en) 2009-05-11 2017-03-07 Microsoft Technology Licensing, Llc Executing native-code applications in a browser
TWI401583B (zh) * 2009-08-06 2013-07-11 Phison Electronics Corp 資料擾亂/解擾亂與資料處理方法及其控制器與儲存系統
GB201000288D0 (en) * 2010-01-11 2010-02-24 Scentrics Information Security System and method of enforcing a computer policy
US8924733B2 (en) * 2010-06-14 2014-12-30 International Business Machines Corporation Enabling access to removable hard disk drives
US8874896B2 (en) * 2010-06-18 2014-10-28 Intertrust Technologies Corporation Secure processing systems and methods
US9444620B1 (en) * 2010-06-24 2016-09-13 F5 Networks, Inc. Methods for binding a session identifier to machine-specific identifiers and systems thereof
CN102436559B (zh) * 2010-09-29 2016-06-01 联想(北京)有限公司 一种状态切换方法及系统
JP2012084071A (ja) 2010-10-14 2012-04-26 Toshiba Corp デジタルコンテンツの保護方法、復号方法、再生装置、記憶媒体、暗号装置
US20120124659A1 (en) 2010-11-17 2012-05-17 Michael Craft System and Method for Providing Diverse Secure Data Communication Permissions to Trusted Applications on a Portable Communication Device
US8776190B1 (en) * 2010-11-29 2014-07-08 Amazon Technologies, Inc. Multifactor authentication for programmatic interfaces
US8943570B1 (en) * 2010-12-02 2015-01-27 Cellco Partnership Techniques for providing enhanced network security
US11063920B2 (en) 2011-02-03 2021-07-13 mSignia, Inc. Cryptographic security functions based on anticipated changes in dynamic minutiae
US8817984B2 (en) 2011-02-03 2014-08-26 mSignia, Inc. Cryptographic security functions based on anticipated changes in dynamic minutiae
US9251337B2 (en) 2011-04-27 2016-02-02 International Business Machines Corporation Scalable, highly available, dynamically reconfigurable cryptographic provider with quality-of-service control built from commodity backend providers
US9495183B2 (en) 2011-05-16 2016-11-15 Microsoft Technology Licensing, Llc Instruction set emulation for guest operating systems
US20120303533A1 (en) * 2011-05-26 2012-11-29 Michael Collins Pinkus System and method for securing, distributing and enforcing for-hire vehicle operating parameters
US9213829B2 (en) * 2011-07-12 2015-12-15 Hewlett-Packard Development Company, L.P. Computing device including a port and a guest domain
US8949813B2 (en) * 2011-07-29 2015-02-03 Dell Products Lp Systems and methods for facilitating activation of operating systems
US8661527B2 (en) 2011-08-31 2014-02-25 Kabushiki Kaisha Toshiba Authenticator, authenticatee and authentication method
US9037852B2 (en) 2011-09-02 2015-05-19 Ivsc Ip Llc System and method for independent control of for-hire vehicles
US20130060721A1 (en) 2011-09-02 2013-03-07 Frias Transportation Infrastructure, Llc Systems and methods for pairing of for-hire vehicle meters and medallions
US9118686B2 (en) 2011-09-06 2015-08-25 Microsoft Technology Licensing, Llc Per process networking capabilities
US9773102B2 (en) 2011-09-09 2017-09-26 Microsoft Technology Licensing, Llc Selective file access for applications
US8990561B2 (en) 2011-09-09 2015-03-24 Microsoft Technology Licensing, Llc Pervasive package identifiers
US9800688B2 (en) 2011-09-12 2017-10-24 Microsoft Technology Licensing, Llc Platform-enabled proximity service
PL3432546T3 (pl) * 2011-11-11 2020-09-07 Soprano Design Limited Bezpieczne przesyłanie wiadomości
JP5275432B2 (ja) 2011-11-11 2013-08-28 株式会社東芝 ストレージメディア、ホスト装置、メモリ装置、及びシステム
US8953790B2 (en) * 2011-11-21 2015-02-10 Broadcom Corporation Secure generation of a device root key in the field
JP5112555B1 (ja) 2011-12-02 2013-01-09 株式会社東芝 メモリカード、ストレージメディア、及びコントローラ
JP5204290B1 (ja) * 2011-12-02 2013-06-05 株式会社東芝 ホスト装置、システム、及び装置
JP5204291B1 (ja) 2011-12-02 2013-06-05 株式会社東芝 ホスト装置、装置、システム
JP5100884B1 (ja) 2011-12-02 2012-12-19 株式会社東芝 メモリ装置
US9389933B2 (en) 2011-12-12 2016-07-12 Microsoft Technology Licensing, Llc Facilitating system service request interactions for hardware-protected applications
US9413538B2 (en) 2011-12-12 2016-08-09 Microsoft Technology Licensing, Llc Cryptographic certification of secure hosted execution environments
JP5275482B2 (ja) 2012-01-16 2013-08-28 株式会社東芝 ストレージメディア、ホスト装置、メモリ装置、及びシステム
US9043878B2 (en) * 2012-03-06 2015-05-26 International Business Machines Corporation Method and system for multi-tiered distributed security authentication and filtering
US9948695B2 (en) * 2012-03-16 2018-04-17 Alcatel Lucent Enabling delivery of protected content using unprotected delivery services
JP2015511050A (ja) 2012-03-20 2015-04-13 クリメニ テクノロジーズ, インコーポレイテッド プロセス作業セット隔離のための方法およびシステム
US9773099B2 (en) * 2012-04-06 2017-09-26 Wayne Odom System, method, and device for delivering communications and storing and delivering data
US9378339B2 (en) * 2012-04-06 2016-06-28 Wayne Odom System, method, and device for delivering communications and storing and delivering data
US9590981B2 (en) * 2012-04-06 2017-03-07 Wayne Odom System, method, and device for delivering communications and storing and delivering data
US9628473B1 (en) * 2012-04-06 2017-04-18 Wayne Odom System, method, and device for delivering communications and storing and delivering data
US9202047B2 (en) 2012-05-14 2015-12-01 Qualcomm Incorporated System, apparatus, and method for adaptive observation of mobile device behavior
US9324034B2 (en) 2012-05-14 2016-04-26 Qualcomm Incorporated On-device real-time behavior analyzer
US9609456B2 (en) 2012-05-14 2017-03-28 Qualcomm Incorporated Methods, devices, and systems for communicating behavioral analysis information
US9298494B2 (en) 2012-05-14 2016-03-29 Qualcomm Incorporated Collaborative learning for efficient behavioral analysis in networked mobile device
US9690635B2 (en) 2012-05-14 2017-06-27 Qualcomm Incorporated Communicating behavior information in a mobile computing device
US10075471B2 (en) 2012-06-07 2018-09-11 Amazon Technologies, Inc. Data loss prevention techniques
US10084818B1 (en) 2012-06-07 2018-09-25 Amazon Technologies, Inc. Flexibly configurable data modification services
US8938616B2 (en) * 2012-06-14 2015-01-20 Kabushiki Kaisha Toshiba Authentication method
US8995657B2 (en) * 2012-06-14 2015-03-31 Kabushiki Kaisha Toshiba Device and method for certifying one's own authenticity
US20130336475A1 (en) * 2012-06-14 2013-12-19 Kabushiki Kaisha Toshiba Device
US8726024B2 (en) 2012-06-14 2014-05-13 Kabushiki Kaisha Toshiba Authentication method
US8751814B2 (en) * 2012-06-14 2014-06-10 Kabushiki Kaisha Toshiba Device
US8989374B2 (en) * 2012-06-15 2015-03-24 Kabushiki Kaisha Toshiba Cryptographic device for secure authentication
US8948400B2 (en) * 2012-06-15 2015-02-03 Kabushiki Kaisha Toshiba Host device
US8762717B2 (en) * 2012-06-15 2014-06-24 Kabushiki Kaisha Toshiba Authentication device
US8898463B2 (en) * 2012-06-15 2014-11-25 Kabushiki Kaisha Toshiba Device
US9166958B2 (en) * 2012-07-17 2015-10-20 Texas Instruments Incorporated ID-based control unit-key fob pairing
US9330257B2 (en) 2012-08-15 2016-05-03 Qualcomm Incorporated Adaptive observation of behavioral features on a mobile device
US9747440B2 (en) 2012-08-15 2017-08-29 Qualcomm Incorporated On-line behavioral analysis engine in mobile device with multiple analyzer model providers
US9319897B2 (en) 2012-08-15 2016-04-19 Qualcomm Incorporated Secure behavior analysis over trusted execution environment
US9495537B2 (en) 2012-08-15 2016-11-15 Qualcomm Incorporated Adaptive observation of behavioral features on a mobile device
CN102843681A (zh) * 2012-08-15 2012-12-26 腾讯科技(深圳)有限公司 信息交互方法和装置
GB2525742A (en) * 2012-09-18 2015-11-04 Cryptomathic Ltd CRM Security core
US9275223B2 (en) 2012-10-19 2016-03-01 Mcafee, Inc. Real-time module protection
GB2507497B (en) * 2012-10-30 2015-01-14 Barclays Bank Plc Device and method for secure memory access
DE102012220990B3 (de) * 2012-11-16 2014-01-23 Siemens Aktiengesellschaft Verfahren und Anordnung zur sicheren Kommunikation zwischen Netzwerkeinrichtungen in einem Kommunikationsnetzwerk
US10356204B2 (en) 2012-12-13 2019-07-16 Microsoft Technology Licensing, Llc Application based hardware identifiers
RU2535175C2 (ru) 2012-12-25 2014-12-10 Закрытое акционерное общество "Лаборатория Касперского" Система и способ обнаружения вредоносного программного обеспечения путем создания изолированной среды
RU2541895C2 (ru) 2012-12-25 2015-02-20 Закрытое акционерное общество "Лаборатория Касперского" Система и способ повышения защищенности данных организации путем создания изолированной среды
US10089582B2 (en) 2013-01-02 2018-10-02 Qualcomm Incorporated Using normalized confidence values for classifying mobile device behaviors
US9686023B2 (en) 2013-01-02 2017-06-20 Qualcomm Incorporated Methods and systems of dynamically generating and using device-specific and device-state-specific classifier models for the efficient classification of mobile device behaviors
US9684870B2 (en) 2013-01-02 2017-06-20 Qualcomm Incorporated Methods and systems of using boosted decision stumps and joint feature selection and culling algorithms for the efficient classification of mobile device behaviors
US9742559B2 (en) * 2013-01-22 2017-08-22 Qualcomm Incorporated Inter-module authentication for securing application execution integrity within a computing device
US9608813B1 (en) 2013-06-13 2017-03-28 Amazon Technologies, Inc. Key rotation techniques
US10467422B1 (en) 2013-02-12 2019-11-05 Amazon Technologies, Inc. Automatic key rotation
US9367697B1 (en) * 2013-02-12 2016-06-14 Amazon Technologies, Inc. Data security with a security module
US9705674B2 (en) 2013-02-12 2017-07-11 Amazon Technologies, Inc. Federated key management
US9201811B2 (en) 2013-02-14 2015-12-01 Kabushiki Kaisha Toshiba Device and authentication method therefor
US9264228B2 (en) 2013-02-14 2016-02-16 BBPOS Limited System and method for a secure display module
US9491187B2 (en) 2013-02-15 2016-11-08 Qualcomm Incorporated APIs for obtaining device-specific behavior classifier models from the cloud
US8984294B2 (en) 2013-02-15 2015-03-17 Kabushiki Kaisha Toshiba System of authenticating an individual memory device via reading data including prohibited data and readable data
US9443107B2 (en) * 2013-02-19 2016-09-13 Qualcomm Incorporated Method for protecting the integrity of a group of memory elements using an aggregate authentication code
US9838375B2 (en) 2013-02-28 2017-12-05 Microsoft Technology Licensing, Llc RESTlike API that supports a resilient and scalable distributed application
KR102015108B1 (ko) * 2013-03-12 2019-10-22 한국전자통신연구원 이종 서비스 간 서비스 제공 방법과 사용자 단말 및 웹 서버
US9858247B2 (en) 2013-05-20 2018-01-02 Microsoft Technology Licensing, Llc Runtime resolution of content references
EP2808818B1 (en) * 2013-05-29 2016-07-13 Nxp B.V. Processing system
US10181124B2 (en) * 2013-05-30 2019-01-15 Dell Products, L.P. Verifying OEM components within an information handling system using original equipment manufacturer (OEM) identifier
JP2016513840A (ja) * 2013-06-05 2016-05-16 ▲ホア▼▲ウェイ▼技術有限公司Huawei Technologies Co.,Ltd. データセキュリティを保護するための方法、サーバ、ホスト、およびシステム
EP2854066B1 (en) * 2013-08-21 2018-02-28 Nxp B.V. System and method for firmware integrity verification using multiple keys and OTP memory
CN104463006B (zh) * 2013-09-25 2017-12-29 联想(北京)有限公司 一种分区访问方法及电子设备
EP2854332A1 (en) * 2013-09-27 2015-04-01 Gemalto SA Method for securing over-the-air communication between a mobile application and a gateway
US10013563B2 (en) * 2013-09-30 2018-07-03 Dell Products L.P. Systems and methods for binding a removable cryptoprocessor to an information handling system
GB2519080B (en) 2013-10-08 2021-04-14 Arm Ip Ltd Scheduling function calls
CA2927547C (en) * 2013-10-14 2021-01-26 Mike Bond Crm security core
KR102183852B1 (ko) * 2013-11-22 2020-11-30 삼성전자주식회사 전자 장치의 무결성 검증을 위한 방법, 저장 매체 및 전자 장치
DE102013019870B4 (de) * 2013-11-28 2019-08-08 Friedrich Kisters Authentifizierungs- und/oder Identifikationsverfahren in einem Kommunikationsnetzwerk
US20150156200A1 (en) * 2013-11-29 2015-06-04 Samsung Electronics Co., Ltd. Apparatus and method for secure and silent confirmation-less presence for public identities
GB2515853B (en) 2014-02-25 2015-08-19 Cambridge Silicon Radio Ltd Latency mitigation
GB2512501A (en) 2014-02-25 2014-10-01 Cambridge Silicon Radio Ltd Packet identification
GB2523759A (en) * 2014-03-04 2015-09-09 Ibm Method for processing of restricted data
CN104951405B (zh) * 2014-03-28 2019-09-06 三星电子株式会社 存储系统以及对存储系统执行和验证写保护的方法
US10235515B2 (en) * 2014-05-15 2019-03-19 Carnegie Mellon University Method and apparatus for on-demand isolated I/O channels for secure applications
US9397835B1 (en) 2014-05-21 2016-07-19 Amazon Technologies, Inc. Web of trust management in a distributed system
US9438421B1 (en) 2014-06-27 2016-09-06 Amazon Technologies, Inc. Supporting a fixed transaction rate with a variably-backed logical cryptographic key
US10032029B2 (en) * 2014-07-14 2018-07-24 Lenovo (Singapore) Pte. Ltd. Verifying integrity of backup file in a multiple operating system environment
US10606965B2 (en) * 2014-07-18 2020-03-31 Leviathan Security Group, Inc. System and method for emulation of unprivileged code in a simulated environment
US10185669B2 (en) * 2014-08-04 2019-01-22 Oracle International Corporation Secure key derivation functions
US9866392B1 (en) 2014-09-15 2018-01-09 Amazon Technologies, Inc. Distributed system web of trust provisioning
US9626304B2 (en) * 2014-10-21 2017-04-18 Sandisk Technologies Llc Storage module, host, and method for securing data with application information
US10769315B2 (en) * 2014-12-01 2020-09-08 T-Mobile Usa, Inc. Anti-theft recovery tool
US10318762B1 (en) * 2015-03-06 2019-06-11 United Services Automobile Association (Usaa) Third-party platform for tokenization and detokenization of network packet data
US9740492B2 (en) * 2015-03-23 2017-08-22 Intel Corporation System management mode trust establishment for OS level drivers
US10484339B2 (en) * 2015-03-24 2019-11-19 Global Data Sentinel, Inc. Pervasive data security
US9792229B2 (en) * 2015-03-27 2017-10-17 Intel Corporation Protecting a memory
US10191914B2 (en) 2015-03-31 2019-01-29 EMC IP Holding Company LLC De-duplicating distributed file system using cloud-based object store
US9916458B2 (en) * 2015-03-31 2018-03-13 EMC IP Holding Company LLC Secure cloud-based storage of data shared across file system objects and clients
US20160292431A1 (en) * 2015-04-02 2016-10-06 defend7, Inc. Management of encryption keys in an application container environment
WO2016172474A1 (en) 2015-04-24 2016-10-27 Encryptics, Llc System and method for enhanced data protection
US10374802B2 (en) 2015-04-24 2019-08-06 Red Hat, Inc. Multi-factor simple password exponential key exchange (SPEKE) authentication
US9773432B2 (en) * 2015-06-27 2017-09-26 Intel Corporation Lightweight cryptographic engine
US9767318B1 (en) * 2015-08-28 2017-09-19 Frank Dropps Secure controller systems and associated methods thereof
EP3356931B1 (en) * 2015-09-30 2021-06-23 Hewlett-Packard Development Company, L.P. Bios runtime verification using external device
US10079684B2 (en) * 2015-10-09 2018-09-18 Intel Corporation Technologies for end-to-end biometric-based authentication and platform locality assertion
GB2545250B (en) * 2015-12-10 2019-06-12 Advanced Risc Mach Ltd Devices and method of operation thereof
EP3179690A1 (en) * 2015-12-11 2017-06-14 Gemalto Sa Mobile device having trusted execution environment
US10594491B2 (en) * 2015-12-24 2020-03-17 Intel Corporation Cryptographic system memory management
JP6700815B2 (ja) * 2016-01-29 2020-05-27 キヤノン株式会社 ライセンス管理システム、クライアント装置、アプリケーションプログラム
JP6656014B2 (ja) * 2016-02-19 2020-03-04 キヤノン株式会社 ライセンスシステム、ライセンス管理サーバ、方法、およびプログラム
US11537757B2 (en) 2016-02-19 2022-12-27 Hewlett-Packard Development Company, L.P. Securely writing data to a secure data storage device during runtime
US10341309B1 (en) 2016-06-13 2019-07-02 Allstate Insurance Company Cryptographically protecting data transferred between spatially distributed computing devices using an intermediary database
US10148444B2 (en) * 2016-08-04 2018-12-04 Dell Products L.P. Systems and methods for storing administrator secrets in management controller-owned cryptoprocessor
US11063758B1 (en) 2016-11-01 2021-07-13 F5 Networks, Inc. Methods for facilitating cipher selection and devices thereof
US10331410B2 (en) * 2016-11-09 2019-06-25 Google Llc Hardened random number generator with ring oscillator collapse time random truncation
US10387333B2 (en) * 2017-01-05 2019-08-20 Qualcomm Incorporated Non-volatile random access memory with gated security access
US20180260556A1 (en) * 2017-03-09 2018-09-13 Meir Avganim Secure data and password storage and recall system
US10749690B2 (en) * 2017-03-10 2020-08-18 Samsung Electronics Co., Ltd. System and method for certificate authority for certifying accessors
TWI659640B (zh) * 2017-11-16 2019-05-11 中華電信股份有限公司 結合區塊鏈技術之簽章系統、簽章方法及簽章驗證方法
CN111865586B (zh) 2017-11-23 2023-01-10 创新先进技术有限公司 一种产品信息的加密方法及装置
US10346608B2 (en) * 2017-12-12 2019-07-09 John Almeida Virus immune computer system and method
US10990371B2 (en) 2018-01-17 2021-04-27 Crowdstrike, Inc. Device driver non-volatile backing-store installation
US11423186B2 (en) * 2018-01-17 2022-08-23 Crowdstrike, Inc. Verified inter-module communications interface
US11301847B1 (en) * 2018-02-15 2022-04-12 Wells Fargo Bank, N.A. Systems and methods for an authorized identification system
SG11202008222WA (en) * 2018-03-15 2020-09-29 Medici Ventures Inc Splitting encrypted key and encryption key used to encrypt key into key components allowing assembly with subset of key components to decrypt encrypted key
CN110532766B (zh) * 2018-05-25 2023-09-08 华为技术有限公司 一种基于多容器的可信应用程序的处理方法及相关设备
CN109029254B (zh) * 2018-07-03 2020-06-16 秦皇岛燕大燕软信息系统有限公司 一种基于点云数据处理的列车车厢载货体积及体密度质量检测方法
US11601264B2 (en) 2018-10-12 2023-03-07 Tzero Ip, Llc Encrypted asset encryption key parts allowing for assembly of an asset encryption key using a subset of the encrypted asset encryption key parts
EP3654578B1 (en) 2018-11-16 2022-04-06 SafeTech BV Methods and systems for cryptographic private key management for secure multiparty storage and transfer of information
TWI691858B (zh) * 2018-12-26 2020-04-21 技嘉科技股份有限公司 應用程式的驗證方法、電腦裝置及其主機板
US11349671B2 (en) * 2019-01-24 2022-05-31 Salesforce.Com, Inc. Authenticating communication
US11218307B1 (en) 2019-04-24 2022-01-04 Wells Fargo Bank, N.A. Systems and methods for generation of the last obfuscated secret using a seed
CN110163755B (zh) * 2019-04-30 2020-11-24 创新先进技术有限公司 基于区块链的数据压缩、查询方法及装置和电子设备
CN110177134B (zh) * 2019-05-10 2021-12-07 东南大学 一种基于多云存储的安全密码管理器及其使用方法
US11240024B2 (en) * 2019-07-29 2022-02-01 EMC IP Holding Company LLC Cryptographic key management using key proxies and generational indexes
EP4042282A4 (en) * 2019-10-09 2023-07-26 Micron Technology, Inc. STORAGE DEVICE WITH PRIVACY SCHEME
US11356367B2 (en) * 2019-11-22 2022-06-07 Red Hat, Inc. Secure preloading of serverless function sequences
CN111159726B (zh) * 2019-12-10 2022-09-13 中国电子科技网络信息安全有限公司 一种基于uefi环境变量的全盘加解密方法及系统
CN111212048A (zh) * 2019-12-26 2020-05-29 北京安码科技有限公司 https协议实时监控方法、系统、电子设备及存储介质
US20220103354A1 (en) * 2020-09-25 2022-03-31 Renesas Electronics Corporation Secure encryption key generation and management in open and secure processor environments
US11522683B2 (en) 2020-12-04 2022-12-06 International Business Machines Corporation Multi-phase protection for data-centric objects
US11659005B2 (en) * 2020-12-16 2023-05-23 Dell Products, L.P. Systems and methods for self-protecting and self-refreshing workspaces
US11171964B1 (en) * 2020-12-23 2021-11-09 Citrix Systems, Inc. Authentication using device and user identity
CN112948773B (zh) * 2021-02-07 2024-05-24 深圳市大梦龙途文化传播有限公司 脚本加密与解密方法、终端设备及可读存储介质
US11418331B1 (en) 2021-02-25 2022-08-16 EMC IP Holding Company LLC Importing cryptographic keys into key vaults
CN113179513B (zh) * 2021-04-16 2022-08-09 中国人民解放军国防科技大学 基于智能反射面相位辅助的无线信道密钥生成方法和设备
US11829482B2 (en) * 2021-06-08 2023-11-28 Dell Products L.P. Pre-boot authentication for virtual machines using credentials stored in virtual trusted platform modules
US11994900B2 (en) * 2021-07-28 2024-05-28 Dell Products L.P. System management mode emulation of the real-time clock
TWI829250B (zh) * 2022-07-19 2024-01-11 群聯電子股份有限公司 簽章驗證方法、記憶體儲存裝置及記憶體控制電路單元

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5022077A (en) * 1989-08-25 1991-06-04 International Business Machines Corp. Apparatus and method for preventing unauthorized access to BIOS in a personal computer system
US5210795A (en) * 1992-01-10 1993-05-11 Digital Equipment Corporation Secure user authentication from personal computer
US5675649A (en) * 1995-11-30 1997-10-07 Electronic Data Systems Corporation Process for cryptographic key generation and safekeeping
US6157985A (en) * 1997-10-16 2000-12-05 Seagate Technology Llc Single-cycle variable period buffer manager for disk controllers
US6327652B1 (en) * 1998-10-26 2001-12-04 Microsoft Corporation Loading and identifying a digital rights management operating system
US7194092B1 (en) * 1998-10-26 2007-03-20 Microsoft Corporation Key-based secure storage
US7174457B1 (en) * 1999-03-10 2007-02-06 Microsoft Corporation System and method for authenticating an operating system to a central processing unit, providing the CPU/OS with secure storage, and authenticating the CPU/OS to a third party
US6775779B1 (en) * 1999-04-06 2004-08-10 Microsoft Corporation Hierarchical trusted code for content protection in computers
KR20020004128A (ko) * 2000-07-03 2002-01-16 김월영 하드웨어락에 의한 보안 및 원격관리 시스템에서서버컴퓨터에서 클라이언트 컴퓨터의 하드웨어락에 저장된알고리즘을 제어하는 방법

Cited By (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030087873A (ko) * 2002-05-10 2003-11-15 주식회사 마이엔진 컴퓨팅 장치의 인증/접근 제어에 사용되는 중요 상수값의보안 방법 및 그를 이용한 인증/접근 제어 방법
US10607036B2 (en) 2003-08-26 2020-03-31 Panasonic Intellectual Property Corporation Of America Program execution device
US8181040B2 (en) 2003-08-26 2012-05-15 Panasonic Corporation Program execution device
US10108821B2 (en) 2003-08-26 2018-10-23 Panasonic Intellectual Property Corporation Of America Program execution device
US11651113B2 (en) 2003-08-26 2023-05-16 Panasonic Holdings Corporation Program execution device
US10970424B2 (en) 2003-08-26 2021-04-06 Panasonic Intellectual Property Corporation Of America Program execution device
US8522053B2 (en) 2003-08-26 2013-08-27 Panasonic Corporation Program execution device
US8874938B2 (en) 2003-08-26 2014-10-28 Panasonic Intellectual Property Corporation Of America Program execution device
US10318768B2 (en) 2003-08-26 2019-06-11 Panasonic Intellectual Property Corporation Of America Program execution device
US9218485B2 (en) 2003-08-26 2015-12-22 Panasonic Intellectual Property Corporation Of America Program execution device
US12019789B2 (en) 2003-08-26 2024-06-25 Panasonic Holdings Corporation Program execution device
US9524404B2 (en) 2003-08-26 2016-12-20 Panasonic Intellectual Property Corporation Of America Program execution device
US9811691B2 (en) 2003-08-26 2017-11-07 Panasonic Intellectual Property Corporation Of America Program execution device
KR100767153B1 (ko) * 2005-09-05 2007-10-15 캐논 가부시끼가이샤 복수의 유저가 동시에 로그인 가능한 정보 처리 장치 및 그제어 방법
KR100843701B1 (ko) * 2006-11-07 2008-07-04 소프트캠프(주) 콜 스택에 기록된 정보를 이용한 에이피아이 확인방법
KR101524387B1 (ko) * 2010-11-15 2015-05-29 제말토 에스에이 데이터를 휴대용 보안 토큰에 로딩하는 방법
WO2013066016A1 (ko) * 2011-11-04 2013-05-10 주식회사 케이티 신뢰관계 형성 방법 및 이를 위한 내장 uⅰcc
US10462668B2 (en) 2011-11-04 2019-10-29 Kt Corporation Method for forming a trust relationship, and embedded UICC therefor
US9426654B2 (en) 2011-11-04 2016-08-23 Kt Corporation Method for forming a trust relationship, and embedded UICC therefor
KR20190064546A (ko) * 2011-11-04 2019-06-10 주식회사 케이티 신뢰관계 형성 방법 및 이를 위한 내장 uⅰcc
US10091653B2 (en) 2011-11-04 2018-10-02 Kt Corporation Method for forming a trust relationship, and embedded UICC therefor
KR20130049726A (ko) * 2011-11-04 2013-05-14 주식회사 케이티 신뢰관계 형성 방법 및 이를 위한 내장 uⅰcc
KR101878682B1 (ko) * 2011-11-14 2018-07-18 삼성전자주식회사 컨텐츠를 보호하기 위한 방법 및 저장 매체
KR20160147903A (ko) * 2014-04-28 2016-12-23 에이알엠 아이피 리미티드 액세스 제어 및 코드 스케줄링
KR20190007572A (ko) * 2017-07-12 2019-01-23 덕성여자대학교 산학협력단 사물인터넷 환경에서의 비밀키 설정 및 상호 기기 인증 방법
CN113904848B (zh) * 2021-10-09 2023-08-04 天翼物联科技有限公司 物联网终端的证书与密钥下载方法及系统
CN113904848A (zh) * 2021-10-09 2022-01-07 天翼物联科技有限公司 物联网终端的证书与密钥下载方法及系统
CN114282250A (zh) * 2021-12-28 2022-04-05 航天科工智能运筹与信息安全研究院(武汉)有限公司 一种模型容器加密与部署系统
CN114282250B (zh) * 2021-12-28 2024-04-09 航天科工智能运筹与信息安全研究院(武汉)有限公司 一种模型容器加密与部署系统
CN116055032A (zh) * 2022-05-11 2023-05-02 荣耀终端有限公司 一种密钥生成方法及电子设备
CN116055032B (zh) * 2022-05-11 2023-09-22 荣耀终端有限公司 一种密钥生成方法及电子设备

Also Published As

Publication number Publication date
CN101114326A (zh) 2008-01-30
TW589569B (en) 2004-06-01
CN1380610A (zh) 2002-11-20
US20030037237A1 (en) 2003-02-20
US20040039924A1 (en) 2004-02-26
KR100879907B1 (ko) 2009-01-21
CN1273901C (zh) 2006-09-06
JP2002312242A (ja) 2002-10-25

Similar Documents

Publication Publication Date Title
KR100879907B1 (ko) 컴퓨팅 디바이스의 보안을 위한 방법 및 시스템
KR101067399B1 (ko) 대칭 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체
KR100996784B1 (ko) 공개 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체
KR101878149B1 (ko) 패스워드의 보안 입력 및 처리 장치, 시스템 및 방법
US7568114B1 (en) Secure transaction processor
US20220114249A1 (en) Systems and methods for secure and fast machine learning inference in a trusted execution environment
Barbosa et al. Provable security analysis of FIDO2
US20070006169A1 (en) Method and apparatus for binding TPM keys to execution entities
KR20170129866A (ko) 블록 체인을 사용하여 디바이스 무결성의 자동화된 입증
EP1763721A1 (en) Systems and methods for performing secure communications between an authorized computing platform and a hardware component
JP2013516685A (ja) コンピューターポリシーを施行するためのシステムおよび方法
Bugiel et al. TruWalletM: Secure web authentication on mobile platforms
Zhang et al. Trusttokenf: A generic security framework for mobile two-factor authentication using trustzone
Cooijmans et al. Secure key storage and secure computation in Android
Pecholt et al. CoCoTPM: Trusted platform modules for virtual machines in confidential computing environments
Pop et al. Secure migration of WebAssembly-based mobile agents between secure enclaves
DiLuoffo et al. Credential Masquerading and OpenSSL Spy: Exploring ROS 2 using DDS security
Hao et al. Trusted block as a service: Towards sensitive applications on the cloud
Sharma Onboard credentials: Hardware assisted secure storage of credentials
Petraglia TLS-Monitor: An Intrusion Detection-based Monitoring Tool for countering TLS Attacks
Hamidy et al. TC4SE: A High-Performance Trusted Channel Mechanism for Secure Enclave-Based Trusted Execution Environments
Joosen TC4SE: A High-Performance Trusted Channel Mechanism for Secure Enclave-Based Trusted Execution Environments
Yanan et al. A security reinforcement technology of telematics box based on secure element
Barbosa et al. Rogue key and impersonation attacks on FIDO2: From theory to practice
Baghdasaryan et al. FIDO UAF Authenticator Commands

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121211

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20131227

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20141226

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20151228

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee