KR20210078437A - 안전한 중복 제거를 위한 방법, 장치, 및 시스템 - Google Patents

안전한 중복 제거를 위한 방법, 장치, 및 시스템 Download PDF

Info

Publication number
KR20210078437A
KR20210078437A KR1020200178474A KR20200178474A KR20210078437A KR 20210078437 A KR20210078437 A KR 20210078437A KR 1020200178474 A KR1020200178474 A KR 1020200178474A KR 20200178474 A KR20200178474 A KR 20200178474A KR 20210078437 A KR20210078437 A KR 20210078437A
Authority
KR
South Korea
Prior art keywords
user
key
map
secure
deduplication
Prior art date
Application number
KR1020200178474A
Other languages
English (en)
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 KR20210078437A publication Critical patent/KR20210078437A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • G06F3/0641De-duplication techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • G06F12/1018Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1466Key-lock mechanism
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1483Protection against unauthorised use of memory or access to memory by checking the subject access rights using an access-table, e.g. matrix or list
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • 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
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory
    • G06F2212/2022Flash memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Mathematical Physics (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Storage Device Security (AREA)

Abstract

본 발명의 실시 예에 따른 KV-SSD(Key-Value Solid State Drive)는 객체 암호화 키를 사용하여 암호화된 데이터 값을 포함하는 데이터에 대한 스토리지, 객체 키를 해시 값에 매핑하는 사용자 보안 객체 맵, 해시 값을 객체 암호화 키에 매핑하는 보안 키 공유 테이블, 및 해시 값을 객체에 대한 스토리지의 주소에 매핑하는 중복 제거 맵을 포함한다. 데이터 값은 객체 키와 관련되고, 객체 키 및 데이터 값은 객체를 형성한다.

Description

안전한 중복 제거를 위한 방법, 장치, 및 시스템{SYSTEM, APPARATUS, AND METHOD FOR SECURE DEDUPLICATION}
본 발명은 일반적으로 스토리지(저장) 시스템들에 관한 것으로, 특히 보안 및 데이터 중복 제거를 모두 지원하는 스토리지 시스템들에 관한 것이다.
키-값 SSD(Key-Value Solid State Drive, KV-SSD)들은 데이터를 저장하고 액세스(access)하는 대안적인 방법을 제공한다. SSD가 장치 상의 PBA(Physical Block Address, 물리 블록 주소)에 매핑하는 LBA(Logical Block Address, 논리 블록 주소)를 제공하는 대신, 호스트는 키(Key)를 데이터에 할당한다. 키가 KV-SSD 상의 다른 키들에 비해 고유한(unique) 경우, 모든 데이터는 KV-SSD 상에 저장될 수 있다. 이것은 KV-SSD에 대한 인스트럭션들(instructions, 명령어들)의 집합을 감소시킨다. 일반적으로, 키와 관련된 값을 저장하고(PUT), 키와 관련된 값을 검색하고(retrieve, 회수하고)(GET), 그리고 키와 관련된 값을 삭제하는(DELETE) 명령들 정도만 필요하다(특정 명령들의 이름은 다를 수 있음).
블록 기반의 스토리지 장치들과 마찬가지로, KV-SSD들은 저장된 중복 데이터를 가질 수 있다. 즉, 여러 사용자들(또는 심지어 동일한 사용자)이 서로 다른 키들로 동일한 데이터를 여러 번 쓰는 것을 막는 것은 없다. 따라서, 데이터 중복 제거(data deduplication)는 다른 유형의 스토리지 장치들과 마찬가지로 KV-SSD들에서도 유용하다.
그러나 보안 문제가 추가되면, 상황이 바뀐다. 보안 장치들에서, 목표는 어떤 사용자도 다른 사용자의 데이터에 대해 알 수 없도록 하는 것이다. 일반적으로, 한 사용자는 다른 사용자가 장치에 저장한 데이터가 무엇인지는 말할 것도 없고, 어떤 데이터를 저장했는지조차 알 수 없다. 그러나 데이터 중복 제거는 특정 데이터의 단일 복사본이 장치에 저장되도록 하기 때문에, 여러 사용자들이 그 동일한 데이터를 사용하는 경우, 한 사용자가 다른 사용자에게 영향을 주는 방식으로 데이터를 변경할 수 있다. 이것은 바람직하지 않은 결과이다.
보안 및 데이터 중복 제거를 모두 지원하는 스토리지 시스템을 개선할 필요가 남아있다.
본 발명의 목적은 보안 및 데이터 중복 제거를 모두 지원하는 스토리지 장치, 시스템 및 그의 동작 방법을 제공하는데 있다.
본 발명의 실시 예에 따른 KV-SSD(Key-Value Solid State Drive)는 객체 암호화 키를 사용하여 암호화된 데이터 값을 포함하는 데이터에 대한 스토리지, 객체 키를 해시 값에 매핑하는 사용자 보안 객체 맵, 해시 값을 객체 암호화 키에 매핑하는 보안 키 공유 테이블, 및 해시 값을 객체에 대한 스토리지의 주소에 매핑하는 중복 제거 맵을 포함한다. 데이터 값은 객체 키와 관련되고, 객체 키 및 데이터 값은 객체를 형성한다.
본 발명의 실시 예에 따른 방법은 장치로부터 KV-SSD(Key-Value Solid State Drive)에 객체를 쓰기 위한 쓰기 요청을 수신하는 단계, 데이터 값의 해시 값을 계산하는 단계, 객체 키를 해시 값에 매핑하도록 사용자 보안 객체 맵을 업데이트하는 단계, 및 데이터 값이 KV-SSD 상에 저장된 주소에 해시 값을 매핑하도록 중복 제거 맵을 업데이트하는 단계를 포함한다. 객체는 객체 키와 관련된 데이터 값을 포함한다.
본 발명의 실시 예에 따른 방법은 장치로부터 KV-SSD(Key-Value Solid State Drive)에 객체를 읽기 위한 읽기 요청을 수신하는 단계, 객체 키를 사용자 보안 객체 맵의 해시 값에 매핑하는 단계, 해시 값을 중복 제거 맵의 주소에 매핑하는 단계, 및 KV-SSD의 주소로부터 객체에 대한 데이터 값을 읽는 단계를 포함한다. 객체는 객체 키에 의해 식별된다.
본 발명에 따르면, 보안을 고려하여 데이터 중복 제거를 수행할 수 있는 안전한 중복 제거(secure deduplication)를 위한 방법, 장치, 및 시스템이 제공된다. 따라서 각 사용자는 보안 KV(Key-Value) 장치에서 데이터 중복 제거의 결과로 동일한 공유된 객체를 조작할 수 있다.
도 1은 본 발명의 일 실시 예에 따른, 보안 중복 제거(secure dedup) KV-SSD를 포함하는 컴퓨터 시스템을 나타낸다.
도 2는 도 1의 컴퓨터 시스템의 세부 사항들을 나타낸다.
도 3은 도 1의 KV-SSD의 세부 사항들을 나타낸다.
도 4는 도 1의 KV-SSD에 저장될 수 있는 객체의 요소들을 나타낸다.
도 5는 도 3의 보안 중복 제거 모듈의 세부 사항들을 나타낸다.
도 6은 도 5의 사용자 보안 객체 맵의 세부 사항들을 나타낸다.
도 7은 도 5의 보안 키 공유 테이블의 세부 사항들을 나타낸다.
도 8은 도 5의 중복 제거 맵의 세부 사항들을 나타낸다.
도 9는 도 5의 랜덤 키 생성기의 동작을 나타낸다.
도 10은 도 1의 KV-SSD 상의 스토리지로부터 사용자 보안 객체 맵을 검색(회수)하는 도 5의 보안 객체 관리자를 나타낸다.
도 11은 본 발명의 다른 실시 예에서 도 5의 보안 중복 제거 장치의 세부 사항들을 나타낸다.
도 12는 도 1의 KV-SSD 상의 스토리지로부터 보안 키 공유 테이블 및 암호화된 객체를 검색(회수)하는 도 5의 보안 중복 제거 관리자를 나타낸다.
도 13은 본 발명의 실시 예에 따른, 도 1의 KV-SSD가 사용자로부터 쓰기 요청을 처리하는 예시적인 절차의 흐름도를 나타낸다.
도 14는 도 5의 보안 객체 관리자가 도 5의 사용자 보안 객체 맵을 사용하는 예시적인 절차의 흐름도를 나타낸다.
도 15는 도 5의 보안 객체 관리자가 사용자 보안 객체 맵을 업데이트하는 예시적인 절차의 흐름도를 나타낸다.
도 16은 도 5의 보안 중복 제거 관리자가 도 5의 중복 제거 맵을 사용하는 예시적인 절차의 흐름도를 나타낸다.
도 17은 도 5의 보안 중복 제거 관리자가 도 5의 보안 키 공유 테이블을 사용하는 예시적인 절차의 흐름도를 나타낸다.
도 18은 도 5의 보안 중복 제거 관리자가 도 5의 보안 키 공유 테이블에 새로운 매핑을 추가하는 예시적인 절차의 흐름도를 나타낸다.
도 19a-19b는 도 5의 보안 중복 제거 관리자가 도 5의 보안 키 공유 테이블을 업데이트하는 예시적인 절차의 흐름도를 나타낸다.
도 20a-20c는 본 발명의 일 실시 예에 따른, 도 1의 KV-SSD가 사용자로부터 읽기 요청을 처리하는 예시적인 절차의 흐름도를 나타낸다.
도 21a-21d는 본 발명의 일 실시 예에 따른, 도 1의 KV-SSD가 사용자로부터 삭제 요청을 처리하는 예시적인 절차의 흐름도를 나타낸다.
이제 본 발명의 실시 예들에 대한 참조가 상세하게 이루어질 것이며, 그 예들은 첨부된 도면들에 예시되어 있다. 다음의 상세한 설명에서, 본 발명의 개념의 완전한 이해를 가능하게 하기위해 다수의 특정 세부 사항들이 제시된다. 그러나, 당업자는 이러한 특정 세부 사항들 없이 본 발명의 개념을 실시할 수 있음을 이해해야 한다. 다른 예들에서, 잘 알려진 방법들, 절차들, 구성 요소들, 회로들 및 네트워크들은 실시 예들의 측면들을 불필요하게 모호하게 하지 않도록 상세하게 설명되지 않았다.
비록 제1, 제2 등의 용어들이 본 명세서에서 다양한 요소들을 설명하기 위해 사용될 수 있지만, 이들 요소들은 이러한 용어들에 의해 제한되어서는 안된다는 것을 이해할 것이다. 이들 용어들은 한 요소를 다른 요소와 구별하는 데만 사용된다. 예를 들어, 제1 모듈은 제2 모듈로 명명될 수 있고, 유사하게 제2 모듈은 본 발명의 개념의 범위를 벗어나지 않고 제1 모듈로 명명될 수 있다.
본 발명의 설명에 사용된 용어는 특정 실시 예들을 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 발명의 설명 및 첨부된 청구 범위에서 사용된 바와 같이, 단수형 "a", "an", 및 "the(상기)"는 문맥상 명백하게 달리 나타내지 않는 한 복수형도 포함하도록 의도된다. 본 명세서에서 사용된 용어 "및/또는"은 하나 이상의 연관된 열거된 항목의 임의의 및 모든 가능한 조합을 지칭하고 포함하는 것으로 또한 이해될 것이다. 본 명세서에서 사용될 때, "포함한다" 및/또는 "포함하는"이라는 용어는 언급된 특징들, 정수들, 단계들, 연산들, 요소들 및/또는 구성 요소들의 존재를 특정하지만, 하나 이상의 다른 특징들, 정수들, 단계들, 연산들, 요소들, 구성 요소들 및/또는 그의 그룹들의 존재 또는 추가를 배제하지는 않는다는 것으로 추가로 이해될 것이다. 도면들의 구성 요소들과 기능들은 반드시 축척에 따라 그려지지는 않는다.
보안 장치의 목표는 데이터를 저장한 사용자만 해당 데이터에 액세스할 수 있도록 하는 것이다. 다른 사용자들은 데이터가 실제로 무엇인지는 말할 것도 없고, 해당 사용자가 장치에 어떤 데이터를 저장했음도 알 수 없어야 한다. 사실, 다른 사용자들은 특정 데이터가 특정 사용자에 의해 쓰여진 것을 판단할 수 없어야 한다. 그러나 사용자는, 다른 사용자가 동일한 데이터에 액세스할 수 있도록 하면서, 다른 사용자와 데이터를 공유할 수 있도록 허용되어야 한다.
구체적으로 들어가기 전에, 용어 "키(Key)"는 여러 의미들을 가질 수 있다. "키"는 데이터를 암호화/복호화하는데 사용될 수 있다. (컴퓨터 과학은 때때로 "키"와 "암호"라는 용어를 구별할 수 있지만-전자는 컴퓨터-판독 가능한 키를 나타내고 그리고 후자는 사람-판단 가능한 키를 나타내고-이 논의의 목적 상 용어들은 상호 교환 가능한 것으로 간주될 수 있다.) 일반적으로, 이러한 키는 "암호화 키(encryption key)"로 불릴 것이고, 비록 암호 시스템(cryptosystem)이 데이터를 암호화하고 복호화하기 위해 다른 키를 사용하는 공개-키 암호 시스템(public-key cryptosystem)인 경우에도 마찬가지다. 한편, "키"는 KV-SSD에서 특정 객체를 식별하기 위해 사용되는 정보를 의미할 수 있다. 일반적으로, 이러한 키는 "객체 키(object key)"로 불릴 것이다. "키"라는 용어가 수식어(modifier)없이 사용되는 경우, 컨텍스트(context, 문맥)는 어떤 유형의 키가 의도되었는지를 명확하게 할 것이다.
보안 KV-SSD(또는 KV-SSD가 단지 하나의 예인 임의의 보안 KV 장치)에서, 보안을 달성하기 위해, 데이터는 암호화되어야 한다. 데이터는 객체 또는 객체들의 집합(그러나 반드시 단일 사용자와 연관된 객체들에 적용되는 것은 아님)에 고유한, 사용자에게 고유한(그러나 사용자의 객체들 중 적어도 일부에서 공유됨), 또는 장치에 고유한(장치 키라고도 함) 암호화 키를 사용하여 암호화될 수 있다. 장치 키는 초기화 시 자체-생성될 수 있고 그리고 장치 외부의 어떤 엔터티(개체)에 의해 알 수 없어야 한다. 장치 관리자도 장치의 암호화 키를 판별할 수 없어야 한다(따라서 이는 관리자에 의해 검사되는 것으로부터 데이터를 보호한다).
암호화되지 않은 내용은 이전과 같이 중복 제거될 수 있다. 객체의 사본이 두 개인 경우, 하나의 사본은 다른 객체에 대한 단지 포인터(pointer)로서 대체될 수 있다. 그러나 암호화된 데이터에 대해, 데이터를 공유하지 않는 두 사용자들 사이의 데이터 중복 제거는 발생하지 않아야 한다(왜냐하면, 위와 같이, 한 사용자가 다른 사용자의 데이터를 추측할 수 있기 때문에). 두 사용자들이 데이터를 공유하는 경우에만 데이터 중복 제거가 발생하여 저장 공간을 절약해야 한다
설계 목표들은 객체 테이블이 사용자 암호화 키에 의해 암호화되는 것을 포함한다(다른 사용자들이 어떤 객체들이 사용자에게 속하는지를 식별하는 것을 방지하기 위해). 이 사용자 키는 사용자가 보안 중복 제거 KV-SSD에 처음 연결할 때 사용자에 의해 제공될 수 있다. 이상적으로, 사용자 키는 보안 중복 제거 KV-SSD에 저장되지 않는다(보안상의 이유들로): 사용자 키 없이, 사용자의 객체들에 액세스하는 방법은 없다.
그러나 보안 중복 제거 KV-SSD에 연결하고 그리고 사용자 키를 제공하는 것만으로는 충분하지 않다. 보안 중복 제거 KV-SSD에 대한 다른 정보는 (숨겨진)장치 키를 사용하여 암호화될 수 있다(즉, 장치에만 알려진 장치 키: 관리자도 장치 키에 액세스할 수 없다). 이 장치 키는 어떤 객체들이 어떤 사용자에게 속하는지를 식별하는 키 테이블들을 암호화하는데 사용될 수 있다.
상술된 바와 같이, 객체 데이터는 객체에 특정한 하나, 객체들의 그룹과 연관된 하나, 객체를 소유한 사용자와 연관된 하나, 및 장치 키와 같은 다양한 키들 중 임의의 것을 사용하여 암호화될 수 있다.
사용자들은 특정 객체를 공유할 수 있는 다른 사용자들을 특정할 수 있다. 그런 다음, 해당 객체에 대해, 데이터 중복 제거는 객체를 공유하는 사용자들의 리스트에서 허용된다.
보안 객체 맵들은 개별 사용자들에 속하는 개별 객체들에 대한 정보를 포함한다. 보안 객체 관리자는 보안 객체 맵들에 액세스할 수 있다. 보안 객체 관리자에로드된(loaded, 적재된) 보안 객체 맵은 객체의 데이터의 해시(hash)인 해시 값과 함께 해당 객체에 대한 ID(즉, 객체 키)를 포함할 수 있다. 보안 객체 맵은 사용자의 암호화 키를 사용하여 암호화될 수 있다: 사용자가 올바른 암호화 키를 제공하지 않으면, 보안 객체 맵 관리자의 정보는 액세스될 수 없다.
보안 객체 관리자는 객체가 보안 중복 제거 KV-SSD에 저장되는 곳을 나타내지 않는다는 것에 유의해야 한다: 그 정보는 다른 곳에 저장된다. 그러나 보안 객체 관리자는 데이터의 해시 값에서 데이터의 해시 값에 대한 객체 키로의 빠른 매핑을 허용하고, 그러면 이것은 아래에서 설명되는 다른 목적들로 사용할 수 있다.
객체가 실제로 저장된 위치는 중복 제거 맵에서 찾을 수 있다. 중복 제거 맵은 해시 값들에서 보안 중복 제거 KV-SSD의 특정 주소들로의 매핑을 보여준다. 중복 제거 맵은 또한 추가 정보를 저장할 수 있다. 예를 들어, 위에서 논의된 바와 같이, 데이터를 공유하지 않는 여러 사용자들에 의해 동일한 데이터가 저장된다면 보안 중복 제거 KV-SSD에 저장된 특정 객체의 여러 사본들이 있을 수 있다. 그러나 데이터의 해시 값은 데이터를 저장한 사람에 의해 변경되지 않기 때문에, 단지 해시 값을 사용하는 것은 올바른 객체를 고유하게 식별하지 못할 수 있다. 따라서, 중복 제거 맵은 데이터를 저장한 사용자의 ID에 대한 열도 포함할 수 있다. 다른 데이터도 또한 중복 제거 맵에 저장될 수 있다(하지만 중복 제거가 반드시 암호화되지 않는다면 중복 제거 맵에 특정 데이터를 포함하지 않는 것이 중요할 수 있음).
중복 제거 맵 외에도, 보안 중복 제거 장치는 보안 키 테이블을 포함할 수 있다. 보안 키 테이블은 보안 중복 제거 KV-SSD에 저장된 객체들의 해시 값과 해당 데이터를 암호화하는데 사용되는 암호화 키 사이를 매핑할 수 있다. 특정 해시 값이 주어지면, 데이터에 대한 적절한 암호화 키가 결정되고, 그래서 (일단 액세스된)데이터는 적절하게 복호화될 수 있다. 중복 제거 맵과 같이, 보안 키 테이블은 중복 제거 대상이 아닌 동일한 데이터의 여러 사본들에 대한 해시 값들의 충돌을 방지하는데 도움이 되는 추가 열들을 포함할 수 있다. 데이터를 암호화하는데 사용되는 암호화 키는 데이터에 적절하게 액세스하는데 필요하기 때문에, 보안 키 테이블은 예를 들어, 장치 암호화 키를 사용하여 암호화되어, 보안이 유지되어야 한다.
보안 중복 제거 KV-SSD에서 데이터를 암호화하기 위해 단일의 개인(비공개, private) 키 암호 시스템만 사용되는 경우, 특정 데이터를 암호화하기 위해 사용되는 암호화 키만을 저장하는 것은 해당 데이터에 대한 액세스를 허용하기에 충분할 수 있다. 공개 키 암호 시스템을 사용하는 경우, 암호화 및 복호화 키들은 모두 저장되어야 할 필요가 있다: 데이터가 보안 중복 제거 KV-SSD에 쓰일 때를 위한 데이터를 암호화하는 암호화 키, 및 보안 중복 제거 KV-SSD로부터 데이터가 읽어질 때를 위한 복호화 키. 여러 암호 시스템들이 사용되는 경우, 보안 키 테이블은 사용될 특정 암호 시스템을 특정하기 위해 또한 필요할 수 있다. 이 명세서의 나머지 부분에서, "암호화 키(encryption key)"라는 용어는 특정 데이터를 암호화 또는 복호화하는데 필요한 모든 정보를 의미하는 것으로 의도되어지고, 따라서 암호화 키, 복호화 키(암호화 키와 다른 경우), 및 사용된 암호 시스템의 모든 조합을 포함할 수 있다.
마지막으로, 보안 객체 공유 테이블은 특정 객체에 대한 액세스를 공유하는 사용자들에 대한 정보를 저장한다. 기본적으로, 객체가 공유된다는 사실, 및 해당 객체가 누구와 공유되는지는 사용자들에 이용 가능하지 않은 정보이다. 사실은, 사용자가 특정 객체에 액세스할 수 없는 경우, 사용자가 올바른 객체 키를 가지고 있더라도, 사용자가 객체에 액세스를 시도하면 보안 중복 제거 KV-SSD는 실제로 오류를 반환해야 한다: 이는 아래에서 자세히 논의된다. (해시 값으로 식별되는)특정 객체가 공유되는 경우, 보안 객체 공유 테이블은 어떤 객체들이 공유되는지를 특정하고, 그리고 어떤 사용자들이 객체에 대한 액세스를 공유하는지를 리스트화(나열)할 수 있다. 중복 제거 맵 및 보안 키 테이블과 마찬가지로, 해시 충돌들을 피하기 위해, 보안 키 테이블은 해시 값에 의해 식별된 데이터를 저장한 사용자 ID와 같은, 추가 정보도 포함할 수 있다.
보안 객체 공유 테이블은 KV-SSD 내부 또는 외부에 존재할 수 있다. KV-SSD 내부에 있는 경우, 장치 암호화 키를 사용하여 암호화될 수 있다. 그렇지 않으면, 장치 암호화 키와 같은 유사한 속성들을 가질 수 있는 스토리지 시스템-레벨 암호화 키를 사용하여 암호화될 수 있다.
위의 설명은 보안 객체 공유 테이블이 보안 키 테이블과 분리되어 있음을 시사하지만, 본 발명의 다른 실시 예들은 이들 두 테이블들을 결합할 수 있다는 것에 유의해야 한다. 예를 들어, 공통 테이블(즉, 보안 키 공유 테이블)은 암호화 키 및 사용자 공유 리스트를 모두 저장할 수 있다. 해시 값들은 표현되는 특정 데이터를 식별하는데도 사용될 수 있다. 본 발명의 다른 실시 예에서, 보안 객체 공유 테이블은 보안 중복 제거 장치에 저장될 수 있다.
공간 활용을 최적화하기 위해, 중복 제거 맵에 저장된 소유자 정보 및 해시 값은 보안 키 테이블과 병합될 수 있다.
이러한 모든 동작들을 지원하기 위해, 보안 중복 제거 KV-SSD는 해시 함수를 또한 포함할 수 있다. 임의의 원하는 해시 함수는 사용될 수 있지만, 선택된 해시 함수는 해시 충돌들(즉, 동일한 해시 값을 반환하는 두 개의 다른 데이터)을 피해야 한다. 수학적으로, 해시 충돌들은 완전히 피할 수 없으나(범위보다 더 많은 엔트리들을 포함하는 도메인에서 매핑하는 임의의 함수는 반드시 적어도 두 개의 다른 입력 값들을 동일한 출력 값에 매핑해야 함), 그러나 해시 함수의 범위가 충분히 크고 및 해시 함수가 적절하게 구현되면, 해시 충돌의 가능성은 용인할 수 있을 정도로 충분히 작을 수 있다. 예를 들어, 256-비트 다이제스트(digest)를 생성하는 해시 함수는 2256 개(1077 개 이상)의 서로 다른 가능한 해시 값을 가질 수 있다. 4KB 블록들을 사용하는 1TB 스토리지 장치는 총 228 개의 블록들을 갖고, 이는 해시 충돌의 가능성이
Figure pat00001
으로, 매우 낮은 확률임을 의미한다.
사용자의 암호화 키를 사용하여 사용자의 보안 객체 맵에 액세스하기 위해, 객체 맵은 스토리지에서 사용자에 대한 (암호화된) 보안 객체 맵을 읽음으로써 및 보안 객체 맵을 복호화하기 위해 사용자 키를 사용함으로써 보안 객체 관리자로 로드될 수 있다. 그러면, 보안 객체 맵은 사용자가 보안 중복 제거 KV-SSD를 사용하는 것을 마칠 때까지 보안 객체 관리자에 저장될 수 있고, 그 후에 보안 객체 맵은 사용자 키를 사용하여 암호화되고 스토리지로 반환될 수 있다.
본 발명의 다른 실시 예에 따른, 멀티-테넌트(multi-tenant) 보안 중복 제거 스토리지 장치에서는, 장치가 열리거나 닫힐 때마다, 새로운 토큰(token)이 발행된다. 장치는 모든 활성(active) 사용자와 패스(pass)를 공유하고, 그리고 장치에 전송된 임의의 명령들은 유효한(valid) 패스가 있어야 한다. 패스가 유효하지 않으면, 명령들은 거부된다. 장치는 또한 ID 속성-기반 암호화(attribute-based encryption, ABE)를 사용하여 각 활성 사용자에 대해 새로운 개인(비공개, private) 키를 발급할 수 있다.
다른 사용자와 데이터를 공유하기 위해, 사용자에게 주어진 데이터가 존재하는 경우, 적절한 암호 키(cipher key)가 반환될 수 있다. 그렇지 않으면, 값을 객체에 쓰고 그리고 암호 키를 반환한다. 데이터를 공유 해제하려면, 주어진 암호 키가 존재하는 경우, 해당 사용자에 대해 공유 해제될 수 있다.
보안 중복 제거 KV-SSD의 일반 동작들로 돌아가서, 장치 초기화시 장치 특정 정보는 장치 암호화 키(device encryption key)를 자체 생성하는데 사용될 수 있다. 상술된 바와 같이, 이 장치 암호화 키는 알 수 없고, 그리고 장치의 관리자도 액세스할 수 없다. 이 장치 암호화 키가 주어지면, 보안 키 테이블은 복호화되고 그리고 다시 암호화되어 키 테이블을 로컬 스토리지에 로드하고 그리고 보안 스토리지로 반환할 수 있다. 보안 키 테이블은 개별 객체들에 엑세스하는데 사용되는 암호화 키에 대한 정보를 저장할 수 있으므로, 일단 해독된, 보안 키 테이블의 정보는 보안 중복 제거 KV-SSD에 쓰일 때 객체를 암호화하고 그리고 보안 중복 제거 KV-SSD에서 읽힐 때 객체를 복호화하는데 사용될 수 있다.
사용자가 보안 중복 제거 KV-SSD에 액세스를 획득하기 위해, 사용자는 호스트 컴퓨터 시스템에 사용자의 ID 및 사용자 암호(password)를 제공할 수 있다. ("암호(password)"는 사용자가 읽을 수 있고, 그리고 "암호화 키(encryption key)"로 간주될 수 있는 무작위로 생성된 비트 시퀀스보다 덜 안전할 수 있는 것을 의미하는 것으로 자주 이해된다. 따라서, "암호"및 "암호화 키"라는 용어는 본 발명의 일부 실시 예들에서 동의어일 수 있지만, 본 발명의 다른 실시 예들에서 사용자 암호는 호스트 컴퓨터에 의해 사용되어 사용자 암호보다 더 안전한 저장된 사용자 암호화 키를 결정하고, 그리고 보안 중복 제거 KV-SSD에 제공되는 것은 이 사용자 암호화 키이다.) 올바른 사용자 ID 및 사용자 암호가 제공되었다고 가정하면, 호스트 컴퓨터 시스템은 보안 중복 제거 KV-SSD에 사용자 키를 제공할 수 있다. 이것은 (누군가가 사용자 키를 가로채는 것을 방지하기 위해) 안전한 방식으로 수행될 수 있다: 예를 들어, Diffie Hellman 키 교환 프로토콜을 사용할 수 있다. 보안 중복 제거 KV-SSD가 호스트 컴퓨터 시스템으로부터 사용자 키를 수신하면, 보안 중복 제거 KV-SSD는 사용자에 대한 보안 객체 맵을 복호화할 수 있다.
사용자가 보안 중복 제거 KV-SSD에서 로그 아웃했다는 메시지를 수신하면, 장치는 사용자 키를 사용하여 사용자의 보안 객체 맵을 암호화하고 그리고 그것을 보안 스토리지로 반환할 수 있다. 그런 다음 장치는 로컬 스토리지에서 사용자 키 및 보안 객체 맵을 제거할 수 있다.
새로운 객체를 장치에 기록하기(쓰기) 위해, 장치는 먼저 데이터의 해시 값을 계산할 수 있다. 그런 다음 장치는 사용자가 새로운 해시 값 또는 업데이트된 해시 값을 반영하도록 보안 객체 맵을 업데이트할 수 있다. (해시 값은 제공된 객체 키가 있는 객체가 장치의 사용자에 대해 이미 존재하는 경우 최신 정보의 업데이트일 수 있다.) 그런 다음 장치는 데이터와 해시 값을 보안 중복 제거 관리자에게 전달할 수 있다(데이터가 실제로 저장되는 위치가 보안 중복 제거 관리자 내에서 관리될 수 있기 때문에).
그런 다음 보안 중복 제거 관리자는 장치 키를 사용하여 보안 키 테이블을 복호화할 수 있다. 해시 값(및 가능한 사용자 ID)이 주어지면, 보안 키 테이블과 중복 제거 맵은 사용자가 액세스할 수 있는 해당 해시 값에 대해 엔트리가 존재하는지를 확인하기(알아보기) 위해 검사(확인)될 수 있다. 이러한 해시 값(및 가능한 이러한 사용자 ID)에 대해 엔트리가 이미 존재하지 않으면, 새로운 엔트리들은 보안 키 테이블, 보안 객체 공유 테이블, 및 중복 제거 맵에 생성될 수 있다. 그런 다음 데이터는 객체에 대한 적절한 암호화 키를 사용하여 암호화되고 그리고 보안 객체 스토리지에 쓰일 수 있고, 보안 키 테이블은 새로운 해시 값과 객체 암호화 키를 반영하도록 업데이트될 수 있고, 그리고 중복 제거 맵은 보안 중복 제거 KV-SSD가 객체를 저장하는 주소를 식별하도록 업데이트될 수 있다. 중복 제거 맵은 또한 1의 참조 카운트(reference count)를 반영할 수 있다(앞에서 설명하지 않은, 이 카운트는 동일한 데이터를 참조하는 서로 다른 객체 키들의 수를 나타낼 수 있음). 보안 객체 공유 테이블은 또한 나중에 공유할 목적으로 해시 값(및 가능하면 사용자 ID)에 대한 엔트리를 생성하도록 업데이트될 수 있다: 현재로는, 보안 객체 공유 테이블은 객체가 어떤 다른 사용자들과 공유되지 않음을 반영할 수 있다.
반면에, 엔트리가 보안 키 테이블 및 중복 제거 맵에 이러한 해시 값에 대해 이미 존재하고 (그리고 사용자가 객체를 소유하거나 공유 리스트에 있다고 가정하고) 그리고 사용자가 데이터에 대한 엑세스를 가지고 있으면, 중복 제거 맵의 참조 카운트는 데이터에 대한 다른 참조를 반영하기 위해 하나씩 증가될 수 있고, 그리고 보안 객체 공유 테이블은 사용자가 데이터에 액세스했음을 반영하도록 업데이트될 수 있다.
보안 키 공유 테이블에는 두 개의 서로 다른 리스트가 존재할 수 있다. 하나의 리스트는 객체를 공유하도록 허용된 사용자들을 식별할 수 있으며, 다른 리스트는 실제로 객체를 공유하는 사용자들을 식별할 수 있다. 그러나 사용자가 객체를 공유하는 권한을 가진다는 것만으로는 사용자가 실제로 보안 중복 제거 KV-SSD에 데이터를 쓴 것을 의미하는 것은 아니다. 예를 들어, 보안 중복 제거 KV-SSD에 객체로 저장된 문서를 고려하자. 이 문서의 사본을 다른 사용자에게 전자 메일로 보냄으로써, 그 다른 사용자는 객체를 액세스하는 권한이 부여될 수 있다. 그러나 그 다른 사용자가 보안 중복 제거 KV-SSD에 문서를 실제로 저장할 때까지, 해당 사용자는 실제로 객체를 공유하지 않는다. 다른 사용자가 실제로 문서를 저장할 때에만 다른 사용자가 실제로 객체를 공유하고 있다(중복 제거는 문서의 여러 사본들이 보안 중복 제거 KV-SSD에 저장되는 것을 방지하기 때문이다). 따라서, 실제로 객체를 사용하는 사용자들의 리스트는 객체를 공유하는 권한이 있는 사용자들의 리스트와 다를 수 있다. 본 발명의 일부 실시 예들에서, 객체를 실제로 공유하는 사람의 리스트는 중복 제거 맵에 저장될 수 있다(중복 제거 맵이 반드시 안전하지는 않지만, 중복 제거 맵에 이 정보를 저장하는 것은 중복 제거 맵을 암호화해야 할 수 있음).
고려할 가치가 있는 또 다른 점은 데이터가 업데이트될 때 일어나는 일이다. 객체가 한 사용자에게만 속하거나, 또는 다른 사용자들이 객체를 공유할 수 있는 권한이 있음에도 한 사용자만 실제로 객체를 공유하는 경우, 객체가 업데이트될 때 원본 데이터는 안전하게 삭제될 수 있다. 결국 객체를 실제로 사용하는 사용자가 한 명뿐이고 그리고 그 사용자가 객체를 업데이트하기로 선택한 경우, 그 사용자는 분명히 원래 데이터에 관심이 없다. (사용자가 원본 데이터에 관심이 있다면, 사용자는 새로운 객체 키로 업데이트된 데이터를 저장하거나 또는 먼저 새로운 객체 키 아래에 원본 데이터의 사본을 만들 것이다.)
그러나 둘 이상의 사용자가 실제로 객체를 공유할 때, 업데이트가 원래 객체를 손실시키는지 여부에 대한 질문은 더 까다롭고, 그리고 정책 결정을 사용하여 구현될 수 있다. 본 발명의 일 실시 예에서, 원본 객체 데이터는 새로운 객체 데이터에 의해 대체될 수 있다(단 한 명의 사용자 만이 데이터에 접근할 수 있는 경우 예시처럼). 본 발명의 이러한 실시 예의 전제는 동일한 데이터에 대한 액세스를 공유하는 사용자들이 액세스가 있는 다른 사용자들이 데이터를 변경할 수 있음을 알고 있다는 것이다. 본 발명의 다른 실시 예에서, 원본 데이터는 어떻게든 유지될 수 있고 그리고 새로운 데이터는 새로운 객체에 저장될 수 있다(아마도 새로운 객체 키를 제공해야 하는 사용자와 함께). 본 발명의 이러한 실시 예의 전제는 서로 다른 사용자들이 각각 자신의 데이터 사본을 원할 수 있지만, 중복 제거는 그들의 사본들을 병합했을 수 있다는 것이다. 이 상황에서, 다른 사용자들은 업데이트된 데이터를 보는 대신 원본 데이터를 유지하기를 원할 수 있다.
장치로부터 객체를 읽기 위해, 장치는 먼저 객체 키가 사용자의 보안 객체 맵에 리스트되어 있는지를 알아볼 수 있다. 객체가 사용자의 보안 객체 맵에 리스트되지 않으면, 보안 중복 제거 KV-SSD는 오류를 반환할 수 있다. 해당 객체 키와 함께 객체가 보안 중복 제거 KV-SSD에 실제로 존재하더라도 이 오류는 반환될 수 있음에 유의해야 한다.
사용자가 제공된 객체 키와 함께 객체에 대한 액세스를 가지고 있다고 가정하면, 보안 중복 제거 KV-SSD는 사용자의 보안 객체 맵으로부터 해시 값을 액세스할 수 있고, 그리고 해당 해시 값을 보안 중복 제거 관리자에게 전달할 수 있다(다시, 보안 중복 제거 관리자는 객체가 실제로 저장된 주소를 저장하는 중복 제거 맵에 대한 액세스를 가지고 있기 때문이다). 그런 다음 보안 중복 제거 관리자는 장치 암호화 키를 사용하여 보안 키 테이블을 복호화할 수 있다. 복호화된 보안 키 테이블로부터, 보안 중복 제거 관리자는 객체를 암호화하는데 사용되는 암호화 키를 식별할 수 있다. 객체가 공유되는 경우 이러한 암호화 키는 다른 사용자에게 속할 수 있다. 따라서, 데이터 읽기를 요청하는 사용자는 실제로 암호화 키에 직접 액세스하지 못할 수 있다. 중복 제거 맵으로부터, 보안 중복 제거 관리자는 객체가 저장된 주소를 결정할 수 있다.
그 다음, 보안 중복 제거 관리자는 객체가 실제로 중복 제거 맵에 특정된 주소에 저장되어 있고, 그리고 사용자가 보안 키 테이블로부터 객체에 대한 액세스를 가지고 있는지를 확인한다. 이론적으로, 이들 두 검사(확인)들은 항상 긍정적인 결과들을 반환해야 한다. 객체 키가 사용자의 보안 객체 맵에서 발견되면, 객체가 존재해야 하고 그리고 사용자가 객체에 대한 액세스를 가지고 있다. 그러나 일부 데이터 손상이 발생할 가능성이 있고, 그리고 이들 검사들은 해당 가능성에 대한 보호를 제공한다. 그런 다음, 보안 중복 제거 관리자는, 중복 제거 맵에서 객체가 저장된 주소 및 보안 키 테이블에서 객체에 대한 암호화 키를 사용하여, 객체를 복호화하고 그리고 데이터를 호스트 컴퓨터 시스템에 반환할 수 있다.
보안 중복 제거 KV-SSD에서 객체를 삭제하기 위해, 사용자가 삭제하려는 객체의 객체 키가 주어지면, 보안 중복 제거 KV-SSD는 사용자의 보안 객체 맵을 확인하여 사용자가 객체에 대한 액세스를 가지고 있는지를 확인할 수 있다. 그렇지 않으면, 보안 중복 제거 KV-SSD는 오류를 반환할 수 있다.
그렇지 않으면, 사용자가 객체에 액세스할 수 있는 경우, 보안 중복 제거 KV-SSD는 객체에 대한 해시 값에 액세스할 수 있고, 그리고 사용자의 보안 객체 맵에서 엔트리를 제거할 수 있다. 그런 다음 해시 값은 보안 중복 제거 관리자에 전달될 수 있다(다시, 보안 중복 제거 관리자는 객체가 실제로 저장된 주소를 저장하는 중복 제거 맵에 액세스할 수 있기 때문이다). 그런 다음 보안 중복 제거 관리자는 장치 암호화 키를 사용하여 보안 키 테이블을 복호화할 수 있다. 보안 중복 제거 관리자는 중복 제거 맵에서 객체의 주소에 액세스할 수도 있다. 그런 다음 보안 중복 제거 관리자는 보안 키 테이블에 따라 사용자가 객체에 액세스할 수 있는지를 결정한다. 그렇지 않은 경우, 비정상적인 문제가 발생한 것이다(사용자의 보안 객체 맵에 따라 사용자가 객체에 액세스할 수 있는 경우, 사용자는 보안 키 테이블에 따라 객체에도 액세스할 수 있어야 하기 때문이다.).
보안 키 테이블이 사용자가 객체에 액세스할 수 있음을 나타낸다고 가정하면, 객체에 대한 참조 카운트는 사용자가 해당 객체에 대한 액세스를 삭제했음을 반영하기 위해 1만큼 감소될 수 있다. 또한 보안 중복 제거 관리자는 보안 키 테이블(또는 보안 객체 공유 테이블)을 업데이트하여 해당 사용자가 더 이상 객체에 액세스하지 않음을 반영할 수 있다(사용자에게 객체에 액세스하기 위한 권한이 여전히 있을 수 있음에도 불구하고).
그런 다음 보안 중복 제거 관리자는 객체에 대한 참조 카운트가 0인지를 결정할 수 있다. 객체에 대한 참조 카운트가 0이면, 그 사실은 현재 객체에 액세스하는 사용자들이 없음을 나타낸다. 이 경우, 보안 중복 제거 관리자는 보안 키 테이블, 보안 객체 공유 테이블, 및 중복 제거 맵에서 해시 값에 대한 엔트리들을 삭제할 수 있고, 그리고 실제로 객체 자체를 삭제할 수 있다.
이 모든 논의로부터, 본 발명의 실시 예가 데이터 액세스 제어된 중복 제거를 허용한다는 것이 명백하다. 사용자의 보안 객체 맵은 사용자 키에 의해 암호화된다. 액세스 권한이 있는 사용자들만 중복 제거된 객체에 액세스할 수 있다.
보안 중복 제거는 변형 메시지-잠금 암호화(variant message-locked encryption)를 기반으로 한다. 문서 당 하나의 암호화 키가 있고, 이는 동적 또는 정적으로 할당될 수 있다. 객체 암호화 키는 메시지의 해시 값, IDX(H(M))에 의해 선택될 수 있고, 이는 암호화가 E(K, IDX(H(M)))의 함수임을 의미한다. 교차-사용자 중복 제거(Cross-user deduplication)는 사용자들에 의해 공유된 보안 객체들에 대해 가능하다(그러나 사용자들이 액세스를 공유하지 않는 보안 객체들에는 해당되지 않음): 하나의 객체는 여러 사용자들에 의해 공유될 수 있다.
사용자 객체들은 객체의 소유자에 액세스 가능할 수 있다(사용자에 의해 제공된 사용자 키로 암호화된 사용자의 보안 객체 맵을 사용하여). 다른 사용자들은 사용자에게 속한 객체를 알지 못할 수 있다(객체를 암호화하는데 사용되는 암호화 키들은 자체적으로 숨겨진 장치 키로 암호화된다). 객체 내용이 암호화된다(가능하면 숨겨진 장치 암호화 키와 함께). 기본적으로, 사용자는 객체가 공유되는지, 또는 누가 객체에 액세스할 수 있는지를 알 수 없다(다시, 암호화 키들은 암호화되고 그리고 공유 정보는 숨겨져 있기 때문에). 각 사용자는 사용자의 객체들에 대한 액세스를 공유할 수 있는 사람들에 대한 개별적 제어를 할 수 있다: 중복 제거는 해당 사용자들 간에만 허용된다. 마지막으로, 사용자 키는 소유자만 알고 있고 그리고 중복 제거 스토리지에 저장되지 않고, 객체들은 초기화시 생성된 장치 키를 사용하여 암호화되기 때문에 관리자조차도 객체 내용들을 복호화할 수 없다(그리고 관리자는 해당 장치 키에 접근할 수 없다).
도 1은 본 발명의 일 실시 예에 따른 보안 중복 제거 키-값 SSD(KV-SSD)를 포함하는 컴퓨터 시스템을 나타낸다. 도 1에서, 호스트 컴퓨터일 수 있는 컴퓨터 시스템(105)은 프로세서(110), 메모리(115), 및 스토리지 장치(120)를 포함할 수 있다. 프로세서(110)는 임의의 다양한 프로세서일 수 있다: 예를 들어, Intel Xeon, Celeron, Itanium 또는 Atom 프로세서, AMD Opteron 프로세서, ARM 프로세서 등. 도 1은 단일 프로세서(110)를 도시하지만, 컴퓨터 시스템(105)은 각각 단일 코어 또는 다중 코어 프로세서들일 수 있고, 그리고 임의의 원하는 조합으로 혼합될 수 있는 임의의 수의 프로세서들을 포함할 수 있다.
프로세서(110)는 메모리(115)에 연결될 수 있다. 메모리(115)는 플래시 메모리, DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), PRAM(Persistent Random Access Memory), FRAM(Ferroelectric Random Access), 또는 MRAM(Magnetoresistive Random Access Memory)과 같은 NVRAM(Non-Volatile Random Access Memory) 등과 같은 임의의 다양한 메모리일 수 있다. 메모리(115)는 또한 상이한 메모리 유형들의 임의의 원하는 조합일 수 있고, 그리고 메모리 컨트롤러(125)에 의해 관리될 수 있다. 메모리(115)는 "단기(shrot-term)"로 지칭될 수 있는 데이터를 저장하는데 사용될 수 있다: 즉, 장기간 동안 저장되지 않을 것으로 예상되는 데이터. 단기 데이터의 예들은 임시 파일들, 애플리케이션들에 의해 국소적으로 사용되는 데이터(다른 저장 위치들로부터 복사되었을 수 있음) 등을 포함할 수 있다.
프로세서(110) 및 메모리(115)는 또한 다양한 애플리케이션들이 실행될 수 있는 운영 체제를 지원할 수 있다. 이러한 애플리케이션들은 메모리(115) 또는 스토리지 장치(120)로부터 데이터를 읽거나 데이터를 쓰기 위한 요청들을 발행할 수 있다. 메모리(115)는 "단기"로 지칭될 수 있는 데이터를 저장하는데 사용될 수 있는 반면, 스토리지 장치(120)는 “장기(long-term)”로 고려되는 데이터를 저장하는데 사용될 수 있다: 즉, 장기간 동안 저장될 것으로 예상되는 데이터. 스토리지 장치(120)는 장치 드라이버(130)를 사용하여 액세스될 수 있다. 스토리지 장치(120)는 HDDs(hard disk drives), SSDs(Solid State Drives), 및 임의의 다른 원하는 형식과 같은 임의의 원하는 형식일 수 있지만, 보안 스토리지 장치(secure storage device)로 의도될 수 있고, 중복 제거를 지원할 수 있고, 및 (블록 기반 인터페이스가 아닌) 키-값 인터페이스(key-value interface)를 제공할 수 있다.
도 2는 도 1의 컴퓨터 시스템(105)의 세부 사항들을 도시한다. 도 2에서, 일반적으로, 컴퓨터 시스템(105)은 하나 이상의 프로세서들(110)을 포함하고, 이들 각각은 메모리 컨트롤러(125) 및 클럭(205)을 포함할 수 있고, 이는 기계의 구성 요소들의 동작들을 조정하는데 사용될 수 있다. 프로세서(110)는 또한 예로서, RAM(random access memory), ROM(read-only memory), 또는 다른 상태 보존 매체를 포함할 수 있는 메모리(115)에 결합될 수 있다. 프로세서(110)는 또한 스토리지 장치(120), 및 예를 들어, 이더넷 커넥터 또는 무선 커넥터일 수 있는 네트워크 커넥터(210)에 결합될 수 있다. 프로세서(110)는 또한 다른 구성 요소들 중에서, I/O 엔진(225)을 사용하여 관리될 수 있는 I/O 인터페이스 포트 및 사용자 인터페이스(220)가 부착될 수 있는 버스(215)에 연결될 수 있다.
도 3은 도 1의 KV-SSD(120)의 세부 사항들을 나타낸다. 도 3에서, KV-SSD(120)는 호스트 인터페이스 로직(HIL)(305), SSD 컨트롤러(310), 및 다양한 플래시 메모리 칩들(315-1~315-8)(또한 "플래시 메모리 스토리지"라고도 함)을 포함할 수 있고, 이는 다양한 채널들(320-1~320-4)로 구성될 수 있다. 호스트 인터페이스 로직(305)은 KV-SSD(120) 및 다른 구성 요소들(예를 들어, 도 1의 프로세서(110)와 같은) 사이의 통신들을 관리할 수 있다. 이러한 통신들은 KV-SSD(120)로부터 데이터를 읽기 위한 읽기 요청들, KV-SSD(120)에 데이터를 쓰기 위한 쓰기 요청들, 및 KV-SSD(120)로부터 데이터를 삭제하기 위한 삭제 요청들을 포함할 수 있다. 호스트 인터페이스 로직(305)은 단지 단일의 포트에 걸쳐 인터페이스를 관리할 수 있거나, 또는 다중 포트들에 걸쳐 인터페이스들을 관리할 수 있다. 대안적으로, KV-SSD(120)는 다수의 포트들을 포함할 수 있고, 이들 각각은 그 포트에 걸쳐 인터페이스들을 관리하기 위한 별도의 호스트 인터페이스 로직(305)을 가질 수 있다. 본 발명의 실시 예들은 또한 가능성들을 혼합할 수 있다(예를 들어, 3개의 포트들을 갖는 SSD는 하나의 포트를 관리하기 위한 하나의 호스트 인터페이스 로직 및 다른 2개의 포트들을 관리하기 위한 제2 호스트 인터페이스 로직을 가질 수 있음).
SSD 컨트롤러(310)는 플래시 메모리 컨트롤러(도 3에 도시되지 않음)를 사용하여 플래시 메모리 칩들(315-1~315-8)에 대한 가비지 수집(garbage collection) 및 다른 동작들과 함께, 읽기 및 쓰기 동작들을 관리할 수 있다.
블록-기반 스토리지 장치, 특히 블록-기반 SSD에서, 호스트는 데이터에 LBA(logical block address)를 할당할 수 있고, 스토리지 장치는 이를 PBA(physical block address)에 매핑할 수 있다. 스토리지 장치는 이러한 매핑들의 기록을 유지하여, SSD 및 호스트가 데이터의 현재 PBA에서 호스트가 최신 상태로 유지되도록 보장할 필요가 없도록 한다. 호스트는 단순히 LBA를 사용하고; 스토리지 장치는 LBA를 PBA에 매핑하고 그리고 적절한 정보를 반환한다. 데이터가 스토리지 장치에 내부적으로 이동하는 경우(예를 들어, SSD들에서 데이터 덮어쓰기(data overwrite) 또는 가비지 수집 중에 발생할 수 있음), 그러한 데이터 이동은 호스트에 대해 투명(명백, transparent)하다(매핑이 데이터의 새로운 PBA로 업데이트되면서). LBA들을 PBA들에 매핑하는 그러한 구조들은 변환 계층들(translation layers) 또는, (특히 플래시 스토리지를 사용하는 다른 장치들 및 SSD들의 상황에서) 플래시 변환 계층들(flash translation layers)이라고 할 수 있다.
반면에, KV-SSD들은 데이터를 다르게 관리한다. LBA가 할당되는 데이터 대신, 데이터(값 또는 데이터 값이라고도 함)에 키(객체 키라고도 함)가 할당될 수 있다. 이것은 용어 변경("LBA"를 대체하는 "객체 키")에 지나지 않는 것처럼 보일 수 있지만, 키들과 객체 LBA들 간에(그리고 KV-SSD들과 블록 기반 SSD들 간에)는 다른 차이점들이 있다. 블록 기반 SSD의 블록의 크기는 제조업체에서 그 당시에 고정된다. 예를 들어, 4KB의 블록들을 가진 블록-기반 SSD에서, 모든 블록은 4KB의 크기이고: 유연성이 없다. 이 사실은 LBA들도 또한 SSD의 블록들에 효과적으로 매핑하기 위해 4KB 단위로 나뉜다는 것을 의미한다. 반면에, KV-SSD들은 데이터 값들에 대해 유연한 크기들을 허용한다. 예를 들어, 값 크기들은 0B에서 2MB까지의 범위일 수 있다. 또한, 객체 키 크기들은 다양할 수 있다: 예를 들어, 4B에서 255B까지. 이러한 배열들은 블록-기반 SSD에 의해 제공될 수 있는 것보다 데이터 저장 방법에 더 많은 유연성을 허용한다.
따라서, 플래시 변환 계층 대신에, KV-SSD(120)는 객체 키로부터 데이터 값이 저장되는 주소로의 일종의 매핑을 포함할 수 있다. 그러나 보안 및 중복 제거의 도입은, 단독으로 및 조합하여, 상황을 복잡하게 만든다.
KV-SSD(120)가 보안되기(안전하기) 위해서, 데이터 값들이 권한이 있는 사용자가 아닌 다른 사람에 의한 액세스로부터 보호되어야 한다. 이 사실은, 권한이 없는 사용자가 객체 키와 관련된 데이터 값을 읽거나 객체 키를 삭제하려고 시도하면, 해당 데이터 키가 있는 객체가 KV-SSD(120)에 저장되어 있을지라도, KV-SSD(120)는 오류를 반환해야 한다. 또한, KV-SSD는, 다른 사용자가 동일한 객체 키를 가진 객체를 저장했더라도, 사용자가 특정 객체 키를 사용하여 객체를 저장할 수 있도록 허용해야 한다. 통상의 KV-SSD에서, 이 동작은 오래된 데이터 값을 새로운 데이터 값으로 덮어쓰는 결과를 초래한다: 그러나 한 사용자가 다른 사용자의 데이터 값들을 읽을 수 없어야 하는 것과 같은 이유로, 한 사용자가 다른 사용자의 데이터 값들을 덮어쓰는 것이 허용되어서는 안된다. 또한, KV-SSD(120)는 오류(객체 키들의 "충돌"로)를 반환할 수도 없다. 왜냐하면, 그 결과는 KV-SSD(120)에 객체를 쓰려고 시도하는 사용자에게 해당 키를 가진 객체가 이미 존재한다는 것을 알려줄 것이기 때문이고, 이는 원하는 보안에 위배된다. (이 후자의 문제에 대한 해결책은 객체 키와 사용자와 관련된 식별자의 조합을 고유한 키(unique key)에 어떻게든 매핑하는 것이다: 예를 들어 데이터의 두 조각들을 연결하거나 및/또는 함께 해싱(hashing)하여 고유한(KV-SSD(120)에) 키를 생성함으로써.)
한편, 데이터 중복 제거는 동일한 데이터가 KV-SSD(120)에 여러 번 저장될 수 있다는 것을 인식하고, 사용 가능한 스토리지 용량에 대한 풋프린트(footprint)를 줄이기 위해 그러한 사본을 하나만 저장해야 한다. 예를 들어, 여러 사람이 KV-SSD(120)에 동일한 문서의 사본들을 저장할 수 있다. 데이터 중복 제거는 특정 사용자의 네임 스페이스(namespace) 내에서만 데이터 중복 제거로 제한될 수 있지만, 그러나 이 선택은 데이터 중복 제거에 의해 제공되는 이점을 제한한다. 반면에, 데이터 중복 제거가 사용자들 간에 수행되면, 한 사용자는 다른 사용자의 데이터를 변경할 수 있고, 이는 보안에 대한 욕구에 반하게 된다.
보안 및 데이터 중복 제거를 처리하기 위해, SSD 컨트롤러(310)는 보안 중복 제거 모듈(325)을 포함할 수 있다. 보안 중복 제거 모듈(325)은 아래의 도 5를 참조하여 더 논의되고, 이는 보안 및 데이터 중복 제거 모두가 최대 이익을 위해 달성되는 방법을 설명한다.
도 3은 4개의 채널들(320-1~320-4)로 구성된 8개의 플래시 메모리 칩들(315-1~315-8)을 포함하는 KV-SSD(120)를 도시하지만, 본 발명의 실시 예들은 임의의 수의 채널들로 구성된 임의의 수의 플래시 메모리 칩들을 지원할 수 있다. 유사하게, 도 3은 KV-SSD의 구조를 보여주지만, 다른 스토리지 장치들(예를 들어, 하드 디스크 드라이브)은 다른 구조(하지만 유사한 잠재적 이점들을 가지는)를 사용하여 보안 및 데이터 중복 제거를 모두 포함하도록 구현될 수 있다.
도 4는 도 1의 KV-SSD(120)에 저장될 수 있는 객체의 요소들을 나타낸다. 도 4에서, 객체(405)가 도시된다. 객체(405)는 객체 키(410) 및 데이터 값(415)을 포함한다. 객체 키(410)는 데이터 값(415)을 식별하기 위해 사용될 수 있다. 따라서, 객체(405)가 도 1의 KV-SSD(120)에 쓰일 때(이는 다른 명령 이름들이 사용될 수 있지만, PUT 명령으로 불릴 수 있음), 객체 키(410) 및 데이터 값(415) 모두가 제공될 수 있다; 객체(405)가 도 1의 KV-SSD(120)로부터 읽히거나 삭제될 때(이는 다른 명령 이름들이 사용될 수 있지만, 각각 GET 명령 및 DELETE 명령으로 불릴 수 있음), 데이터 값(415)이 도 1의 KV-SSD(120) 내에서 찾아질 수 있도록 객체 키(410)가 제공될 수 있다.
도 5는 도 3의 보안 중복 제거 모듈(325)의 세부 사항들을 도시한다. 도 5에서, 보안 중복 제거 모듈(325)은 해시 함수(505), 보안 객체 관리자(510), 및 보안 중복 제거 장치(515)를 포함할 수 있다. 해시 함수(505)는 도 4의 객체(405)에 대한 도 4의 데이터 값(415)의 해시 값을 생성하는데 사용될 수 있다: 이러한 해시 값의 사용은 아래의 도 6 내지 도 8을 참조하여 더 논의된다.
보안 객체 관리자(510)는 사용자 보안 객체 맵(520-1, 520-2, 및 520-3)에 액세스할 수 있다. 각각의 사용자 보안 객체 맵(520-1, 520-2, 및 520-3)은 특정 사용자에 대한 보안 객체 맵일 수 있다. 아래의 도 6을 참조하여 더 논의되는 바와 같이, 사용자 보안 객체 맵들(520-1, 520-2, 및 520-3)은 특정 사용자의 네임 스페이스(namespace) 내의 객체들-즉, 특정 사용자가 액세스할 수 있는 객체들-에 대한 정보를 저장할 수 있다.
보안 객체 관리자(510)는 필요에 따라 로컬 스토리지로부터 사용자 보안 객체 맵들(520-1, 520-2, 및 520-3)을 로드(load) 및 언로드(unload, 하적)할 수 있다(즉, 사용자들이 컴퓨터 시스템(105)에서 로그인 및 로그 아웃 할 때): 보안 객체 관리자(510)에 로드될 때, 사용자 보안 객체 맵들(520-1, 520-2 및 520-3)은 로컬 메모리에 저장될 수 있고, 로컬 메모리는 (예를 들어) 휘발성 또는 비 휘발성 스토리지일 수 있고 그리고 플래시 스토리지, DRAM 등과 같은 임의의 유형일 수 있다. 보안 객체 관리자(510)에 로드되지 않을 때, 사용자 보안 객체 맵들(520-1, 520-2 및 520-3)은 KV-SSD(120)의 일반 스토리지에 저장될 수 있고(즉, 도 3의 플래시 메모리 칩들(315-1~315-8)), 또는 그들은 예약된 스토리지에 저장될 수 있다(즉, 보통의 사용자 데이터가 저장되지 않을 수 있는 스토리지).
보안 중복 제거 장치(515)는 보안 한계들 내에서 허용되는 데이터 값들에 대한 보안 액세스와 데이터 중복 제거를 모두 처리할 수 있다. 보안 중복 제거 장치(515)는 보안 중복 제거 관리자(525), 중복 제거 맵(530) 및 보안 키 공유 테이블 (535)을 포함할 수 있다. 보안 중복 제거 관리자(525)는 실제로 도 1의 KV-SSD(120)에 저장된 데이터 값들에 대한 액세스를 관리하는 동작을 수행할 수 있다. 특히, 보안 중복 제거 관리자(525)는 어떤 사용자들이 다양한 객체들을 쓰고, 읽고, 및 삭제할 수 있는지, 그리고 이러한 객체들에 대한 데이터 값들이 원치 않는 액세스로부터 보호되는 방법을 결정할 수 있다. 보안 중복 제거 관리자(525)는 보안 키 공유 테이블(535)을 사용할 수 있는데, 이는 어떤 사용자들이 어떤 객체들에 액세스할 수 있고 그리고 이러한 객체들에 대한 데이터 값들이 보호되는 방법을 식별할 수 있고, 그리고 보안 중복 제거 관리자(525)는 중복 제거 맵(530)을 사용할 수 있는데, 이는 객체들에 대한 데이터 값들이 저장되는 위치를 식별할 수 있다. 보안 키 공유 테이블(535)은 아래의 도 7을 참조하여 더 논의된다. 중복 제거 맵(530)은 아래의 도 8을 참조하여 더 논의된다.
보안 중복 제거 관리자(525)는 필요에 따라 로컬 스토리지에서 보안 키 공유 테이블(535) 및 중복 제거 맵(530)을 로드 및 언로드할 수 있다(즉, 이러한 구조들에서 데이터가 필요할 때): 보안 중복 제거 관리자(525)에 로드될 때, 보안 키 공유 테이블(535) 및 중복 제거 맵(530)은 로컬 메모리에 저장될 수 있고, 이는 (예를 들어) 휘발성 또는 비 휘발성 스토리지일 수 있고 그리고 플래시 스토리지, DRAM 등과 같은 임의의 유형일 수 있다. 보안 중복 제거 관리자(525)에 로드되지 않을 때, 보안 키 공유 테이블(535) 및 중복 제거 맵(530)은 KV-SSD(120)의 일반 스토리지에 저장될 수 있고(즉, 도 3의 플래시 메모리 칩들(315-1~315-8)), 또는 예약된 스토리지에 저장될 수 있다(즉, 보통의 사용자 데이터가 저장되지 않을 수 있는 스토리지에).
주의 깊은 독자는 사용자 보안 객체 맵들(520-1, 520-2, 및 520-3), 보안 객체 관리자(510), 보안 중복 제거 관리자(525), 및 보안 키 공유 테이블(535)이 다른 구성들 보다 두꺼운 선들로 둘러싸여 있음을 알 수 있다. 이들 두꺼운 선들은 이들 구성들이 원치 않는 액세스로부터 보호해야하는 민감한 데이터를 포함할 수 있음을 나타낸다. 사용자 보안 객체 맵들(520-1, 520-2 및 520-3), 및 보안 키 공유 테이블(535)의 경우, 이러한 보호는 암호화되는 데이터를 포함할 수 있다. 그러나 이러한 데이터 구조들의 데이터는 보안 객체 관리자(510) 및 보안 중복 제거 관리자(525)에 의해 사용되기 위해 복호화될 수 있기 때문에, 보안 객체 관리자(510) 및 보안 중복 제거 관리자(525)도 또한 외부 액세스에 대해 보호될 수 있다. 즉, 보안 객체 관리자(510) 및 보안 중복 제거 관리자(525)는 특정 명령들을 수신하고 그에 따라 응답할 수 있지만, 그러나 그들의 구조들 내의 정보는 액세스될 수 없어야 한다. 예를 들어, 보안 객체 관리자(510) 및 보안 중복 제거 관리자(525)는 외부 프로세스 또는 장치(도 1의 KV-SSD(120) 내의 어느 하나라도)가 보안 객체 관리자(510) 및 보안 중복 제거 관리자(525)의 구조들에 내부적으로 저장된 임의의 데이터를 읽도록 허용해서는 안된다.
상술된 논의는 중복 제거 맵(530)이 안전하다는 것을 나타내지 않는다: 예를 들어, 그것이 암호화되어 저장된다. 중복 제거 맵(530)의 정보는 도 1의 KV-SSD(120)에 저장된 객체들에 대해 유용한 것을 결정함에 있어 최소 값이고, 따라서 암호화되지 않고 저장될 수 있다. 그러나 본 발명의 일부 실시 예들에서 중복 제거 맵(530)도 암호화될 수 있다. 또한, 도 6 내지 도 8은 각각의 사용자 보안 객체 맵들(520-1, 520-2 및 520-3), 보안 키 공유 테이블(535), 및 중복 제거 맵(530)에 저장되는 특정 데이터를 설명하지만, 도 1의 KV-SSD(120)에 객체를 성공적으로 쓰고, 읽고, 삭제하기에 충분한 정보가 존재하는 경우, 어떤 데이터 구조들이 어떤 정보를 저장하는지는 거의 중요하지 않다. 따라서, 본 발명의 일부 실시 예들에서 정보는 이들 데이터 구조들 사이에서 이동될 수 있거나, 또는 결합된 데이터 구조의 수가 더 적을 수 있다. 예를 들어, 보안 키 공유 테이블(535) 및 중복 제거 맵(530)은 단일 데이터 구조들로 결합될 수 있고, 그리고 이론적으로 사용자 보안 객체 맵들(520-1, 520-2, 및 520-3)과 결합될 수도 있다. 또는, 보안 키 공유 테이블(535)은 사용자 보안 객체 맵들(520-1, 520-2 및 520-3)과 결합될 수 있다. 또는, 다양한 테이블들이 더 많은 수의 테이블들로 분할될 수 있다(예를 들어, 특정 객체에 대한 공유 리스트는 보안 키 공유 테이블(535)이 아닌 보안 객체 공유 테이블에 저장될 수 있다.). 이러한 다양한 데이터 구조들을 결합하는 모든 조합들은, 전체적으로 또는 부분적으로, 이러한 데이터 구조들에 저장된 데이터의 모든 가능한 배열들과 마찬가지로, 본 발명의 실시 예들로 간주된다. (물론, 민감한 객체들에 대한 데이터가 중복 제거 맵(530)에 저장되면, 중복 제거 맵(530)이 도 1의 KV-SSD(120)에 저장된 객체들을 보호하기 위해 암호화될 수 있다.).
사용자 보안 객체 맵들(520-1, 520-2 및 520-3), 보안 키 공유 테이블(535), 및 중복 제거 맵(530)이 암호화될 수 있다는 것을 논의했고, 그들이 어떻게 암호화되는지를 논의하는 것이 중요해진다. 암호화 알고리즘의 세부 사항들은 중요하지 않다: 적절한 보안을 제공하는 암호화 알고리즘은 사용될 수 있다. 예를 들어, 56-비트 키를 가지는, 데이터 암호화 표준(Data Encryption Standard, DES)은 본 발명의 일부 실시 예들에서 안전하다고 간주될 수 있지만, 다른 암호화 알고리즘들이 대신 사용될 수 있는, 본 발명의 다른 실시 예들에서는 불충분하게 안전하다고 간주될 수 있다. 암호화 알고리즘보다 더 중요한 것은 암호화 알고리즘에 의해 사용되는 암호화 키에 대한 질문이다.
사용자 보안 객체 맵들(520-1, 520-2, 및 520-3)은 이러한 맵들과 연관된 개별 사용자들에 특정한 정보를 저장할 수 있다. 따라서, 사용자에게 고유한(특정한) 사용자 키는 이러한 데이터 구조들을 암호화하는데 사용될 수 있다. 이들 사용자 키들은, 보안상의 이유들로, 도 1의 KV-SSD (120)에 저장되지 않을 수 있다. 따라서, 사용자가 도 1의 컴퓨터 시스템(105)에 로그인 할 때마다, 도 1의 컴퓨터 시스템(105)은 사용자 키를 KV-SSD(120)에 제공할 수 있고, 그것에 의하여 보안 객체 관리자(510)가 적절한 사용자 보안 객체 맵을 복호화할 수 있게 한다. 사용자가 도 1의 컴퓨터 시스템(105)에서 로그 아웃할 때, 도 1의 컴퓨터 시스템(105)은 이 사실에 대해 도 1의 KV-SSD(120)에 메시지를 전송할 수 있고, 따라서 보안 객체 관리자(510)는 사용자의 키를 사용하여 사용자 보안 객체 맵을 재-암호화(re-encrypt)하고 그리고 재-암호화된 사용자 보안 객체 맵을 스토리지에 다시 쓸 수 있다. 보안 객체 관리자(510)가 암호화된 사용자 보안 객체 맵을 저장한 후, 보안 객체 관리자(510)는 (복호화된) 사용자 보안 객체 맵의 임의의 기록을 제거하고 그리고 (더 중요한 것은) 로컬 스토리지로부터 사용자 키를 제거할 수 있고, 이는 원치 않는 당사자(party)가 이러한 정보에 액세스하는 것을 방지할 수 있다.
그러나 각 사용자 보안 객체 맵이 사용자에 특정한 정보를 저장하는 반면, 보안 키 공유 테이블(535)은 여러 사용자에 걸쳐 데이터를 저장할 수 있다. 따라서, 보안 키 공유 테이블(535)이 임의의 개별 사용자 키를 사용하여 암호화되는 것은 바람직하지 않을 것이다: 이러한 선택은 각 사용자가 동일한 사용자 키를 공유해야 하고 및/또는 한 사용자는 해당 사용자가 액세스할 수 없는 데이터에 액세스할 수 있음을 의미한다. 따라서, 보안 키 공유 테이블(535)은 도 1의 KV-SSD(120)에게만 알려진, 장치 암호화 키를 사용하여 암호화될 수 있다. 이상적으로, 장치 암호화 키는 도 1의 KV-SSD(120) 외부에서도 접근할 수 없어야 한다: 시스템 관리자조차도 장치 암호화 키에 대한 액세스가 거부될 수 있다(따라서 시스템 관리자조차도 보안 중복 제거 모듈(325)에 의해 제공되는 보호들을 우회하는 것을 방지할 수 있다). 장치 암호화 키의 생성은 아래의 도 9를 참조하여 더 논의된다.
물론, 장치 암호화 키는 사용자 보안 객체 맵들(520-1, 520-2, 및 520-3)을 암호화하는데 사용될 수 있다. 그러나 사용자들을 가로지르는 정보가 사용자 보안 객체 맵들(520-1, 520-2, 및 520-3)에 저장되지 않는 경우(예를 들어, 다른 사용자들이 특정 객체에 액세스하도록 허용될 수 있음), 사용자 보안 객체 맵들(520-1, 520-2, 및 520-3)을 암호화하기 위해 사용자 키들을 사용하는 것은 두 가지 이점들이 있다. 첫째, 서로 다른 사용자 키들이 서로 다른 사용자 보안 객체 맵들을 암호화하는데 사용될 수 있기 때문에, 단일의 키(장치 암호화 키와 같은)는 다른 사용자 보안 객체 맵들에서 정보를 노출하는데 사용될 수 없다. 둘째, 사용자 키들이 도 1의 KV-SSD(120)에 저장되지 않을 수 있기 때문에(그러나 대신 사용자가 도 1의 컴퓨터 시스템(105)에 로그인할 때 도 1의 컴퓨터 시스템(105)에 의해 도 1의 KV-SSD(120)에 제공될 수 있음), 사용자 키들은 도 1의 KV-SSD(120)에 대한 데이터를 검사하더라도 결정되지 않을 수 있다.
도 6은 도 5의 사용자 보안 객체 맵(520-1)의 세부 사항들을 도시한다. 도 6에서, 사용자 보안 객체 맵(520-1)은 다양한 엔트리들을 포함하는 테이블로 도시된다. 예를 들어, 사용자 보안 객체 맵(520-1)의 하나의 엔트리는 객체 키(410)를 해시 값(605)과 짝을 짓는다. 다른 열들도 원하는대로 사용자 보안 객체 맵(520-1)에 저장될 수 있다. 따라서, 특정 객체 키가 주어지면, 이 객체 키와 관련된 해시 값(및 잠재적으로 다른 데이터)은 결정될 수 있다. 검색 목적들을 위해, 사용자 보안 객체 맵(520-1)은 하나 이상의 인덱스 열을 포함할 수 있다. 도 6은 사용자 보안 객체 맵(520-1)을 테이블로 도시하지만, 본 발명의 실시 예들은 임의의 다른 원하는 데이터 구조들을 사용하여 객체 키(410)와 해시 값(605) 사이의 매핑을 저장할 수 있다. 도 5의 보안 중복 제거 장치(515) 내에서 대부분의 추가 동작들은 객체 키(410) 보다 해시 값(605)에 의존한다.
LBA에서 객체 키로의 "이름 변경(name change)"과 같이, 객체 키(410)에서 해시 값(605)으로의 매핑은 불필요해 보일 수 있다: 하나의 식별자는 단순히 다른 식별자로 "스왑(swap, 바꾸다)"된다. 사용자 보안 객체 맵(520-1)이 객체 키(410)에서 해시 값(605)으로 매핑되는 이유는 데이터 중복 제거의 결과이다. 중복 데이터가도 1의 KV-SSD(120)와 같은 스토리지 장치에 저장되는 경우, 해당 중복 데이터에는 종종 다른 식별자들(예를 들어, 파일 이름들)이 제공된다. 도 1의 KV-SSD(120)와 같은, 키-값 스토리지 장치들에서, 객체들은 다른 객체 키들을 가질 것으로 예상된다(표준 컴퓨터 파일 시스템의 두 파일들에는 파일 이름 자체와 루트 폴더(root folder)에서 경로를 모두 고려하는 고유한 완전히 자격이 있는(fully qualified, 정규화된) 파일 이름이 있어야 하는 것과 같이). 그러나 데이터가 실제로 복제된 경우(즉, 동일한 경우), 그러면 데이터의 해시 값은 어떤 객체 키 또는 어떤 완전히 자격이 있는 파일 이름이 데이터에 첨부된지에 관계없이 동일하다. 예를 들어, "abc123" 데이터가 포함된 파일은 파일 이름이 "mytext.doc" 인지 "Iloveyou.song" 인지 여부에 관계없이(또는 객체 키가 "12345" 값인지 "987654321" 값인지 여부에 관계없이) 동일한 해시 값을 생성한다. 따라서, 객체 키들은 객체의 데이터에 관계없이 고유할 수 있지만, 데이터의 해시 값들은 데이터 자체가 다른 경우에만 달라져야 한다. 객체 키가 아닌 해시 값으로 작업함으로써, 데이터 중복 제거는 수행될 수 있고 그리고 도 1의 KV-SSD(120)는 그것의 객체 키가 주어진 임의의 데이터를 위치시킬(찾을) 수 있다.
후속 포인트(follow-up point)는 객체 키에서 해시 값으로의 매핑이 다른 공유된 데이터 구조가 아닌, 사용자 보안 객체 맵(520-1)에 저장되는 이유이다. 도 5를 참조하여 위에서 논의된 바와 같이, 이러한 매핑은 도 5의 중복 제거 맵(530)의 도 5의 보안 키 공유 테이블(535)과 같이(예시적으로), 다른 곳에 저장될 수 있다. 그러나 객체 키에서 해시 값으로의 매핑을 사용자 보안 객체 맵(520-1)에 저장함으로써, 사용자가 액세스를 허용해서는 안되는 객체에 대한 액세스를 얻는 것에 대한 추가 보호가 도입된다. 제공된 객체 키가 사용자 보안 객체 맵(520-1)에 없는 경우, 해당 사용자는 해당 객체에 액세스할 수 없다. (아래의 도 12를 참조하여 더 논의되는 바와 같이, 본 발명의 일부 실시 예들에서 이 규칙에 대한 예외가 있다.)
도 7은 도 5의 보안 키 공유 테이블(535)의 세부 사항들을 보여준다. 도 7에서, 보안 키 공유 테이블(535)은 다양한 엔트리들을 포함하는 테이블로 도시된다. 예를 들어, 보안 키 공유 테이블(535)의 한 엔트리는 해시 값(605)을 객체 암호화 키(705), 공유 리스트(710), 및 액세스 리스트(715)와 짝을 짓는다. 보안 키 공유 테이블(535)에 표시된 모든 열들이 필요하지는 않고, 그리고 다른 열들도 원하는대로 보안 키 공유 테이블(535)에 저장될 수 있다. 따라서, 특정 해시 값이 주어지면, 해당 객체에 대한 데이터 값을 암호화하는데 사용되는 객체 암호화 키(705)는 객체를 공유하도록 허용된 사용자들의 리스트(공유 리스트(710)) 및 실제로 객체를 공유하는 사용자들의 리스트(액세스 리스트(715))와 함께, 결정될 수 있다. 검색 목적들을 위해, 보안 키 공유 테이블(535)은 하나 이상의 인덱스 열들을 포함할 수 있다. 도 7은 보안 키 공유 테이블(535)을 테이블로 도시하지만, 본 발명의 실시 예들은 임의의 다른 원하는 데이터 구조들을 사용하여 해시 값(605)과 공유 리스트(710), 액세스 리스트(715), 및 객체 암호화 키(705) 간의 매핑을 저장할 수 있다.
보안 키 공유 테이블(535)이 해시 값(605)에서 객체 암호화 키(705)로의 매핑을 저장하는 이유는 데이터를 암호화하는데 사용되는 암호화 키가 객체에 액세스하려는 사용자와 연관된 것이 아닐 수 있기 때문이다. 예를 들어, 다음 상황을 고려한다. 사용자 1은 도 1의 KV-SSD(120)에 객체를 쓴다(이 객체가 문서를 나타낸다고 가정). 도 1의 KV-SSD(120)가 안전하기 때문에, 이 객체의 데이터 값은 사용자 1에 의해 생성된 암호화 키일 수 있는 암호화 키(key1)를 사용하여 암호화될 수 있다. 그런 다음 사용자 1은, 아마도 문서를 사용자 2에게 전자 메일로 보냄으로써, 이 객체를 사용자 2와 공유한다. 이제 사용자 2가 도 1의 KV-SSD(120)에 동일한 객체를 쓴다고 가정한다. 도 1의 KV-SSD(120)는 데이터 중복 제거를 제공하고 그리고 객체가 사용자 1과 2간에 공유되었고 그리고 데이터가 변경되지 않는다는 사실 때문에, 도 1의 KV-SSD(120)는 사용자 2에 의해 할당된 객체 키를 단순히 객체의 기존 사본에 가리킬 수 있다(사용자 2에 의해 생성된 암호화 키일 수 있는, 암호화 키(Key 2)를 사용하여 암호화된 새로운 사본을 저장하는 대신). 그러나 사용자 2가도 1의 KV-SSD(120)로부터 객체를 읽으려고 할 때, 그들의 암호화 키가 key 2이므로 데이터(key 1을 사용하여 암호화된)를 성공적으로 복호화할 수 없다. 그러나 해시 값(605)으로부터 객체 암호화 키(705)로의 매핑을 저장함으로써, 도 1의 KV-SSD(120)는 도 1의 KV-SSD(120)에 쓰인 데이터를 암호화하는데 사용되는 실제 암호화 키를 결정할 수 있고, 그리고 객체에 액세스할 권한이 있는 다른 사용자(예를 들어, 식별자가 공유 리스트(710)에 있는 사용자)에 대한 데이터를 복호화하기 위해 해당 암호화 키를 사용할 수 있다.
도 1의 KV-SSD(120)가 데이터가 중복되는지 여부를 결정하기 위해 해시 값(605)을 사용할 수 있다는 사실의 한 가지 결과는 해시되는 데이터가 동일해야 한다는 것이다. 그러나 데이터의 암호화된 버전이 도 5의 해시 함수(505)를 사용하여 해시된 경우, 그러면 동일한 데이터의 서로 다른 사용자들의 사본들 간에 데이터 중복 제거가 발생하지 않는 것이 사실상 확실하다(암호화되지 않은 데이터가 동일하더라도 암호화된 버전들은 서로 다른 해시 값으로 해시된다). 본 발명의 실시 예들은 사용자들에 걸쳐(또는 적어도, 중복 제거될 수 있는 객체에 대한 액세스를 공유하는 사용자들에 걸쳐) 데이터 중복 제거를 수행할 수 있기 때문에, 도 5의 해시 함수(505)는 객체의 가공되지 않은(raw)(암호화되지 않은/복호화된) 데이터에 적용될 수 있다. 해시 함수들은 일반적으로 되돌릴 수 없기 때문에, 보안의 잠재적인 약점이 아니다: 해시 값이 주어지면, 일반적으로 원래 데이터를 재구성할 수 없다. (물론, 되돌릴 수 있는 해시 함수를 사용했다면, 원래 데이터는 복구될 수 있으므로, 한 방향 해시 함수(되돌릴 수 없음)가 사용되어야 하고, 그렇지 않으면 도 6의 사용자 보안 객체 맵(520-1) 및 도 8의 중복 제거 맵(530)(아래에서 논의됨)에 저장된 해시 값들은 보안을 유지하기 위해 암호화에 의해 보호되어야 한다.
객체 암호화 키(705)는 임의의 원하는 암호화 키일 수 있고, 그리고 임의의 원하는 객체들의 세트에 적용될 수 있다. 따라서, 예를 들어, 객체 암호화 키(705)는 해시 값(605)에 의해 식별된 객체에 대해 고유할 수 있다: 다른 객체는 데이터를 암호화/복호화하기 위해 객체 암호화 키(705)를 사용할 수 없다(도 7은 객체 암호화 키(705)와 동일한 암호화 키를 사용하는 해시 값이 "1234"인 객체를 도시한 바와 같이, 본 발명의 이러한 실시 예는 도 7에 분명히 도시되지 않는다). 또는, 객체 암호화 키(705)는 객체들의 세트를 암호화/복호화하기 위해 사용될 수 있다: 이 객체들의 세트는 단일 사용자에 의해서만 쓰여진 객체들을 포함할 수 있거나, 또는 여러 다른 사용자들에 의해 쓰여진 객체들을 포함할 수 있다. 또는, 객체 암호화 키(705)는 단일 사용자에 속하는 암호화/복호화하는데 사용될 수 있다(그리고 사용자 키와 동일 하거나 또는 다른 암호화 키일 수 있다). 또는, 객체 암호화 키(705)는 도 1의 KV-SSD(120)상의 모든 객체들을 암호화/복호화하는데 사용될 수 있다(도 7이 다른 암호화 키를 사용하는 객체들을 도시한 바와 같이, 본 발명의 이러한 실시 예는 도 7에 분명히 도시되지 않는다). 더욱이, 이러한 상이한 변화들은 원하는 임의의 방식으로 결합될 수 있다. 예를 들어, 한 객체는 해당 객체에 고유한 키를 소유할 수 있고, 다른 객체들의 세트는 단일 암호화 키를 공유할 수 있고, 등등.
객체 암호화 키(705)를 생성하는 한 가지 방법은 해시 값(605)의 함수로서 객체 암호화 키(705)를 생성하는 것이다. 객체 암호화 키(705)가 해시 값(605)의 함수로 생성되는 모델은 메시지-잠금(message-locked) 암호화로 불릴 수 있다. 즉, M은 (평문(plaintext)) 데이터, C는 (암호문(cyphertext)) 데이터, H()는 해시 함수, IDX()는 암호화 키 생성 함수, E()는 암호화 함수, 및 D()는 복호화 함수를 나타내는 경우, 그러면 C와 M의 값들은 방정식 C = E(M, IDX(H(M))) 및 M = D(C, IDX(H(M)))를 사용하여 관련될 수 있다.
객체 암호화 키(705)가 해시 값(605)의 함수로서 생성될 수 있지만, 이러한 간단한 접근에는 문제들이 있다. 암호화 키 생성 함수는 결정론적(deterministic)일 필요가 있다-즉, 동일한 해시 값(605)이 주어지면, 암호화 키 생성 함수는 동일한 객체 암호화 키(705)를 생성해야 할 필요가 있다. 그러나 암호화 키 생성 함수가 결정론적이고 알려져 있고, 그리고 해시 값(605)이 보호되지 않는 경우, 해시 값(605)에 액세스할 수 있는 사람은 (예를 들어, 반드시 암호화되지는 않은, 도 5의 중복 제거 맵(530)으로부터) 암호화 함수를 결정할 수 있다. 따라서, 더 나은 접근 방식은 (랜덤 암호화 키들이 도 5의 보안 중복 제거 모듈(325) 내 어딘가에 안전하게 저장될 수 있는)각 문서에 대한 랜덤 암호화 키를 생성하고, 그리고 암호화 키 생성 함수가 랜덤 암호화 키들의 이러한 세트로 인덱싱하는 것이다. 이러한 방식에서, 해시 값(605)과 임의의 특정 객체 암호화 키(705) 사이에 미리 결정된 관계가 없다. (이 변형은 또한 객체 암호화 키(705)를 직접 저장하는 보안 키 공유 테이블(535) 대신에, 보안 키 공유 테이블(535)이 단지 암호화 키가 실제로 저장된 위치에 대한 포인터(pointer)를 저장할 수도 있고, 또는 아무것도 저장하지 않고 대신 암호화 키 생성 함수에 의존하여 해시 값(605)을 적절한 랜덤 암호화 키에 매핑할 수도 있음을 의미한다.)
상술한 바와 같이, 공유 리스트(710) 및 액세스 리스트(715)는 데이터가 해시 값(605)으로 해시되는 객체에 액세스가 허용되는 사용자들의 리스트 및 데이터가 해시 값(605)으로 해시되는 객체에 실제로 액세스하는 사용자들의 리스트를 나타낸다. 예상될 수 있는 바와 같이, 액세스 리스트(715)는 공유 리스트(710)의 서브 세트(subset, 하위 세트)여야 한다: 즉, 객체를 공유하도록 허용되지 않은 사용자가 객체에 액세스할 수 있는 일이 발생해서는 안된다. 두 리스트들 모두 반드시 필요한 것은 아니다: 실제로 객체에 액세스하는 임의의 사용자는 도 5의 사용자 보안 객체 맵(520-1)에 엔트리를 가지고 있어야 한다는 사실에 의존하여, 액세스 리스트(715)는 생략될 수 있다. 공유 리스트(710) 및 액세스 리스트(715)가 목록들(리스트들)로 설명되지만, 어떤 데이터 구조도 어떤 사용자들이 공유하도록 허용되고 및/또는 객체에 액세스하고 있는지 저장하는데 사용될 수 있다: 또한, 각 목록에 대해 다른 데이터 구조들이 사용될 수 있다.
도 8은 도 5의 중복 제거 맵(530)의 세부 사항들을 보여준다. 도 8에서, 중복 제거 맵(530)은 다양한 엔트리들을 포함하는 테이블로 도시된다. 예를 들어, 중복 제거 맵(530)의 한 엔트리는 해시 값(605)을 주소(805) 및 카운트(810)와 짝을 짓는다. 중복 제거 맵(530)에 표시된 모든 열들이 필요한 것은 아니며, 다른 열들도 원하는대로 중복 제거 맵(530)에 저장될 수 있다. 따라서, 특정 해시 값이 주어지면, 주소(805)는 실제로 얼마나 많은 다른 객체들이 이 동일한 주소에 가리키는지에 대한 카운트(810)와 함께(얼마나 많은 이 객체의 중복들이 저장되지 않았는지를 나타냄), 실제 데이터(도 7의 객체 암호화 키(705)를 사용하여 암호화된)가 저장되는 곳에 위치를 찾는데 사용될 수 있다. 검색 목적들을 위해, 중복 제거 맵(530)은 하나 이상의 인덱스 열들을 포함할 수 있습니다. 도 8은 중복 제거 맵(530)을 테이블로 도시하지만, 본 발명의 실시 예들은 임의의 다른 원하는 데이터 구조들을 사용하여 해시 값(605)과 주소(805) 및 카운트(810) 사이의 매핑을 저장할 수 있다.
도 7은 공유 리스트(710) 및 액세스 리스트(715)를 포함하는 것으로 보안 키 공유 테이블(535)을 도시하는 반면, 도 8은 카운트(810)를 포함하는 것으로 중복 제거 맵(530)을 도시한다. 상술한 바와 같이, 다양한 데이터는 본 발명의 다른 실시 예들에서 다른 데이터 구조들에 저장될 수 있다. 따라서, 카운트(810)는 도 7의 보안 키 공유 테이블(535)에 저장될 수고, 또는 도 7의 공유 리스트(710) 및/또는 도 7의 액세스 리스트(715)는 본 발명의 실시 예에 따라, 중복 제거 맵에 저장될 수 있다.
또한, 카운트(810)는 도 7의 액세스 리스트(715)를 반드시 반복하는 것은 아니다. 도 7의 액세스 리스트(715)는 어떤 사용자들이 객체를 적극적으로 공유하고 있는지 식별할 수 있지만, 그들이 객체를 공유하는 횟수를 식별할 수는 없다. 동일한 사용자가 동일한 객체의 여러 사본들을 저장한 경우(결과적으로 여러 데이터 중복 제거가 발생함), 도 7의 액세스 리스트(715)는 사용자 ID를 한 번만 반영할 수 있지만 그러나 카운트(810)는 각각의 그러한 사본을 반영할 수 있다. 따라서, 카운트(810)는 적어도 도 7의 액세스 리스트(715)의 엔트리들의 수와 같아야 하거나, 더 클 수 있다.
또한, 중복 제거 맵(530)은 반드시 해시 값(605)을 필요로 하지 않는다. 예를 들어, 도 7의 보안 키 공유 테이블(535)은 중복 제거 맵(530)의 적절한 엔트리에 대한 포인터, 인덱스, 또는 일부 다른 참조를 포함할 수 있다. 이는 중복 제거 맵(530)이 저장되는 데이터에 관한 정보를 포함하지 않기 때문에, 보안을 더욱 강화할 수 있다: 중복 제거 맵(530)은 데이터가 저장될 수 있는 주소들 및 얼마나 많은 서로 다른 객체들이 그 주소를 참조하는 지의 리스트에 불과하다.
도 9는 도 5의 랜덤 키 생성기의 동작을 나타낸다. 도 9에서, 랜덤 키 생성기(905)는 데이터(910)-바람직하게는 일련 번호와 같은, 장치에 특정한 데이터이지만, 시스템 날짜/시간 또는 난수와 같은, 다른 변수 정보도 추가될 수 있음-를 가져올 수 있고 그리고 해당 데이터를 장치 암호화 키(915)를 생성하기 위해 사용할 수 있다. 랜덤 키 생성기(905)는 원하는 임의의 키 생성 방식을 사용하여 동작할 수 있다: 유일한 조건은 장치 암호화 키가 안전해야 한다는 것이다. 다시 말해, 제3 자가 장치 암호화 키(915)가 무엇인지를 재생성하거나 추측할 수 없어야 하는 것이 바람직하다.
도 10은 도 1의 KV-SSD(120) 상의 스토리지로부터 사용자 보안 객체 맵을 검색(회수)하는 도 5의 보안 객체 관리자(510)를 도시한다. 도 10에서, 보안 객체 관리자(510)는 스토리지로부터 사용자 보안 객체 맵(520-1)의 사본을 로드할 수 있다. 위에서 논의된 바와 같이, 이 스토리지는 객체들이 쓰여진 동일한 스토리지(즉, 도 3의 플래시 메모리 칩들(315-1~315-8))이거나, 또는 이 스토리지는 객체들이 쓰여진 위치와 분리될 수 있다. 사용자 보안 객체 맵(520-1)의 사본을 로드하기 위해, 1005동작에 도시된 바와 같이, 사용자 보안 객체 맵(520-1)은 사용자 키를 사용하여 복호화될 수 있다. 보안 객체 관리자(510)는 사용자가 도 1의 컴퓨터 시스템(105)에 로그인할 때(그리고 도 1의 컴퓨터 시스템(105)은 먼저 사용자 키를 도 1의 KV-SSD(120)에 제공한다), 또는 사용자가 도 1의 KV-SSD(120)에 저장된 임의의 객체에 처음 액세스를 시도할 때(쓰기, 읽기 또는 삭제함으로써) 사용자 보안 객체 맵(520-1)을 로드할 수 있다. 사용자 보안 객체 맵(520-1)의 이러한 복호화된 버전은 사용자 객체 맵(1010)으로 표시된다.
도 1의 컴퓨터 시스템(105)을 사용하는 과정 동안에, 사용자는 객체들을 쓰거나 삭제함으로써 사용자 보안 객체 맵(520-1)의 데이터를 수정할 수 있다(읽기만으로는 사용자 보안 객체 맵(520-1)의 정보를 변경하지 않을 수 있음). 사용자가 도 1의 컴퓨터 시스템(105)에서 로그 아웃할 때, 1015 동작에서 볼 수 있듯이, 사용자 객체 맵(1010)은 사용자 키를 사용하여 암호화될 수 있고 그리고 그 후 스토리지에 다시 쓰여질 수 있다. 사용자 보안 객체 맵(520-1)이 암호화되고 그리고 스토리지에 다시 쓰이면, 사용자 객체 맵(1010) 및 사용자 키는 도 1의 KV-SSD(120)로부터 제거될 수 있다(즉, 복호화된 형태의 사용자 객체 맵(1010)은 그 안에 저장된 임의의 정보가 보호되도록 제거될 수 있다: 암호화된 형태의 사용자 보안 객체 맵(520-1)은 여전히 도 1의 KV-SSD(120)에 있을 것이다).
도 11은 본 발명의 다른 실시 예에서 도 5의 보안 중복 제거 장치(515)의 세부 사항들을 도시한다. 도 11에서, 보안 중복 제거 장치(515)는 중복 제거 맵(530), 보안 중복 제거 관리자(525), 및 보안 키 공유 테이블(535)을 포함한다. 그러나 보안 중복 제거 장치(515)는 또한 토큰 기반 인증 모듈(1105), 보안 구성(1110), 및 공유 명령 처리 모듈(1115)을 포함할 수 있다. 이들 구성 요소들은 통상의 토큰 기반 시스템들에서와 같이 동작할 수 있지만, 이들 구성 요소들을 보안 중복 제거 장치(515)에 배치함으로써 보안 중복 제거 장치(515)는 보안 동작들(예를 들어, 암호화 및/또는 복호화)에서 이러한 구성 요소들의 힘을 활용할 수 있다.
장치가 열리거나 닫힐 때마다, 새로운 토큰이 발행될 수 있다. 그런 다음 보안 중복 제거 장치(515)는 모든 활성 사용자들과 패스(pass)를 공유할 수 있다. 보안 중복 제거 장치(515)로의 임의의 명령들은 유효한 패스를 가져야 한다: 유효한 패스가 없는 임의의 명령들은 거부될 수 있다. 보안 중복 제거 장치(515)는 식별자 속성-기반 암호화(Attribute- Based Encryption, ABE)를 사용하여 각 활성 사용자에 대한 새로운 개인 키(private key)를 발행할 수 있다. 사용자들 간에 데이터를 공유하기 위해, 사용자에 대해 주어진 데이터가 있는 경우, 암호(cipher) 식별자가 반환될 수 있다; 그렇지 않으면, 값이 쓰이고 그리고 암호 식별자가 반환된다. 주어진 암호 식별자는 사용자들 간에 공유되지 않을 수 있다.
도 12는 도 1의 KV-SSD(120) 상의 스토리지로부터 보안 키 공유 테이블 및 암호화된 객체를 검색(회수)하는 도 5의 보안 중복 제거 관리자(525)를 도시한다. 도 10의 보안 객체 관리자(510)와 매우 유사하게, 보안 중복 제거 관리자(525)는 스토리지로부터 보안 키 공유 테이블(535)을 검색(회수)할 수 있다(이는, 다시 객체들이 쓰이는 동일한 스토리지(즉, 도 3의 플래시 메모리 칩들(315-1 내지 315-8)이거나, 또는 객체들이 쓰여진 위치와는 별개일 수 있다). 그러나 사용자 키에 의해 암호화되는 대신, 보안 키 공유 테이블(535)은 도 9의 장치 암호화 키(915)를 사용하여 암호화될 수 있다(임의의 사용자가 도 1의 KV-SSD(120)로부터 객체들에 액세스하려고 할 때 보안 키 공유 테이블은 사용될 수 있음). 따라서, 1205 동작은 도 9의 장치 암호화 키(915)를 사용하여 보안 키 공유 테이블(535)을 복호화할 수 있다(도 12에서 키 공유 테이블(1210)로서 복호화됨).
일단 사용되면, 키 공유 테이블(1210)은 1215 동작으로 도시된 보안 키 공유 테이블(535)을 재수립하기 위해 도 9의 장치 암호화 키(915)를 사용하여 다시 암호화될 수 있다. (암호화된) 보안 키 공유 테이블(535)은 이후 스토리지에 다시 쓰일 수 있다.
도 12는 보안 키 공유 테이블(535)만이 복호화되는 실시 예를 도시한다: 도 5의 중복 제거 맵(530)은 도 12에 도시된 실시 예에서 아마도 암호화되지 않았을 것이다. 도 5의 중복 제거 맵(530)이 암호화되면, 보안 중복 제거 관리자(525)는 보안 키 공유 테이블(535)과 동일한 방식으로 도 5의 중복 제거 맵(530)을 복호화하고 재-암호화(re-encrypt)할 수 있다.
보안 중복 제거 관리자(525) 및 도 10의 보안 객체 관리자(510)의 동작들 사이에는 많은 유사점이 있지만, 둘 사이에 적어도 하나의 중요한 차이점이 있다: 암호화 및 복호화의 타이밍. 도 10의 보안 객체 관리자(510)가 사용자가 로그인할 때 도 10의 사용자 보안 객체 맵(520-1)을 복호화하고, 그리고 사용자가 로그 아웃할 때 도 10의 사용자 보안 객체 맵(520-1)을 다시 암호화하는 것은 의미가 통한다: 손상될(위태로워질, compromised) 수 있는 임의의 데이터는 손상 당시 활성화된 사용자들만으로 제한된다(그리고 설령 그렇더라도, 노출된 유일한 데이터는 객체 키들 및 관련된 해시 값들일 수 있다: 이러한 정보를 함께 하더라도 공격자가 도 1의 KV-SSD(120)로부터 객체들에 액세스하기에는 충분하지 않다). 그러나 보안 키 공유 테이블(535)(및 암호화된 경우, 도 5의 중복 제거 맵(530))은 KV-SSD(120)의 사실상 모든 트랜잭션(transaction, 거래, 처리)에서 사용되므로, 데이터 구조들을 암호화하여 그들을 스토리지에 쓰기 전에 모든 트랜잭션들이 완료될 때까지 대기하는 것은 데이터 구조들이 절대 암호화되지 않을 것임을 의미할 수 있다. 이러한 데이터 구조들(저장하는 데이터에 따라 다름)을 암호화되지 않게 두는 것은 도 10의 사용자 보안 객체 맵(520-1)을 잠시 동안 암호화되지 않게 남겨 두는 것보다 잠재적으로 훨씬 더 큰 보안 취약점이다. 따라서, 본 발명의 일부 실시 예들에서, 보안 키 공유 테이블(535)(및 암호화된 경우, 도 5의 중복 제거 맵(530))은 트랜잭션을 수행하기 위해 필요할 때 복호화될 수 있고, 그리고 그 트랜잭션이 완료되면 다시 암호화될 수 있다. 이러한 배열은 데이터 구조들이 최소 시간 동안 복호화된 상태에 있도록 보장하고, 이는 데이터 취약점의 위험을 줄일 수 있다.
또 다른 대안은 엔트리들이 보안 키 공유 테이블(535)의 전체가 아니라 개별적으로 암호화되는 것이다. 즉, 도 7의 해시 값(605)은 암호화되지 않고 남겨질 수 있지만(보안 키 공유 테이블(535)의 적절한 엔트리가 식별될 수 있도록), 그러나 도 7의 공유 리스트(710), 도 7의 액세스 리스트(715), 및 도 7의 객체 암호화 키(705)는 (별도로)암호화될 수 있다. (해시 값(605)은 보통 유용한 정보를 제공하지 않기 때문에, 도 7의 해시 값(605)을 암호화하지 않은 채로 두는 것은 취약점을 유발하지 않는다.) 이러한 방식으로, 특정 트랜잭션에 필요한 적절한 데이터(그러나 해당 데이터만)가 복호화될 수 있고, 나머지 데이터는 암호화되고 안전 해진다.
그 사이에 있는 것은 보안 키 공유 테이블(535)을 부분들로 분할하고-예를 들어, 도 1의 KV-SSD (120)에서 개별 페이지에 맞는 양들로-그리고 각 부분을 개별적으로 암호화하는 것이다. 본 발명의 이러한 실시 예들에서, 보안 키 공유 테이블(535)의 전체가 아니라, 필요할 때 보안 키 공유 테이블(535)의 적절한 부분만이 복호화될 필요가 있다. (물론, 그러한 각 부분은 별도의 보안 키 공유 테이블로 고려될 수 있고, 이 경우 도 5의 보안 중복 제거 관리자(525)는 모든(every) 보안 키 공유 테이블이 아닌, 전체(entire) 보안 키 공유 테이블을 효과적으로 복호화한다.)
읽기 요청이 보안 키 공유 테이블(535)의 어떤 정보도 변경하지 않을 수 있기 때문에, 읽기 트랜잭션 후 보안 키 공유 테이블(535)을 암호화하는 것은 필요가 없을 수도 있다는 것을 또한 주목할 가치가 있다. 따라서, 본 발명의 일부 실시 예들에서, 키 공유 테이블(1210)은 정보의 손실없이 읽기 트랜잭션 후에 단순히 제거될 수 있다.
일단 특정 객체를 암호화하는데 사용되는 도 7의 객체 암호화 키(705)가 보안 키 공유 테이블(535)로부터 결정되었으면, 해당 암호화 키는 객체에 대해 도 4의 데이터 값(415)을 암호화 및/또는 복호화하는데 사용될 수 있다. 따라서, 예를 들어, 데이터가 도 1의 KV-SSD(120)에 쓰이고 있다면, 도 7의 객체 암호화 키(705)는 객체(405)에 대한 도 4의 데이터 값(415)을 암호화하는데 사용될 수 있고 그리고 1225 동작에 도시된, 암호화된 객체(1220)를 생성하는데 사용될 수 있다. 반면에, 데이터가 도 1의 KV-SSD(120)로부터 읽히고 있다면, 도 7의 객체 암호화 키(705)는 1230 동작에 도시된, 객체(405)를 생성하기 위해 암호화된 객체(1220)를 복호화하는데 사용될 수 있다.
발생할 수 있는 한 가지 질문은 객체(405)가 도 1의 KV-SSD(120)에 처음 쓰일 때 도 7의 객체 암호화 키(705)가 초기에 어떻게 결정되는지이다. 대답은 도 7의 객체 암호화 키(705)가 임의의 원하는 정책에 따라 결정될 수 있다는 것이다. 하나의 정책은 도 9의 장치 암호화 키(915)가 도 7의 객체 암호화 키(705)로 사용되도록 특정할 수 있다. 다른 정책은 사용자 키가 사용자에 의해 쓰여진 모든 객체들에 대해 도 7의 객체 암호화 키(705)로서 사용되도록 지정할 수 있다. 제3 정책은 도 7의 고유한 객체 암호화 키(705)가 각 객체에 대해 생성되도록(아마도 쓰이는 객체의 도 4의 데이터 값(405)에 기초하여) 지정할 수 있다. 제4 정책은 객체(405)가 도 1의 KV-SSD(120)에 처음 쓰일 때 사용되기 위해 사용자가 도 7의 객체 암호화 키(705)를 선택하도록 프롬프트(prompt)할 수 있다. 다른 정책들도 여기에 명시적으로 설명되어 있든 없든, 사용될 수 있다.
이 시점에서, 암호화 키들의 주제를 다시 살펴볼 가치가 있다. 3개의 다른 암호화 키들이 지금까지 논의되었다: 사용자 키(도 10의 사용자 보안 객체 맵(520-1)을 암호화/복호화하는 데 사용됨), 도 9의 장치 암호화 키(915)(도 12의 보안 키 공유 테이블(535)을 암호화/복호화하는 데 사용됨), 및 도 7의 객체 암호화 키(705). 이들 키들에 대해 주목할 가치가 있는 몇 가지 사항들이 있다. 다양한 사항들이 위의 논의에서 이러한 암호화 키들에 대해 논의되었지만, 추가로 주목할 사항들이 있다.
첫째, 오늘날 일반적으로 사용되는 두 가지 서로 다른 유형들의 암호화 시스템들(cryptographic systems)이 있다: 동일한 암호화 키를 사용하여 데이터를 암호화 및 복호화하는 개인-키 암호화 시스템(private-key cryptosystem)(대칭 암호화 시스템(symmetric cryptosystem)이라고도 함), 및 서로 다른 키들을 사용하여 데이터를 암호화 및 복호화하는 공개-키 암호화 시스템(public-key cryptosystem)(비대칭 암호 시스템(asymmetric cryptosystem)이라고도 함). 임의의 종류의 "암호화 키"에 대한 모든 참조는 암호화 시스템의 어느 하나의 유형을 사용하는 키들을 포함할 수 있다. 또한, 암호 시스템이 공개-키 암호 시스템인 경우, "암호화 키"에 대한 모든 참조는 대응하는 복호화 키를 포함하도록 의도되고, 따라서 두 동작들은 모두 수행될 수 있다. 예를 들어, 도 10의 1005 동작 및 1015 동작 모두는 도 10의 사용자 보안 객체 맵(520-1)을 암호화 및 복호화하는 데 있어서 사용자 키를 나타낸다. 이처럼, 1205 동작 및 1215 동작 모두는 도 9의 장치 암호화 키(915)를 나타내고, 1225 동작 및 1230 동작 모두는 도 7의 객체 암호화 키(705)를 나타낸다. 공개-키 암호 시스템들은 데이터를 암호화하고 복호화하는데 서로 다른 키들을 사용하기 때문에, 동일한 암호화 키는 두 동작들 모두에 사용할 수 없음이 명백하다. 따라서, 도 10의 1005 동작, 1205 동작, 및 1230 동작에서 암호화 키에 대한 참조는 인용된 암호화 키가 아니라, 대응하는 복호화 키를 사용할 것이다. 이러한 이해는 암호화 키라는 용어를 사용하기 위해 의도된다: 선택된 암호화 시스템에 따라, 필요한 키가 무엇이든, "암호화 키"(또는 그 변형들)라는 용어가 사용되는 곳에 사용될 수 있다.
둘째, 본 발명의 실시 예들은 단일 암호 시스템으로 제한되지 않거나, 심지어 단일 유형의 암호 시스템으로 제한되지 않는다. DES(Data Encryption Standard, 데이터 암호화 표준)(개인-키 암호화 시스템), AES(Advanced Encryption Standard, 고급 암호화 표준)(개인-키 암호화 시스템), RSA(Rivest-Shamir-Adleman)(공개-키 암호 시스템), 및 타원 곡선 기술들(elliptic curve techniques)(공개-키 암호 시스템)과 같은, 많은 서로 다른 암호화 시스템들을 사용할 수 있다. 하나의 암호화 키는 DES를, 다른 하나는 AES를, 세 번째는 RSA를, 네 번째는 타원 곡선 기술을 사용할 수 있다. 본 발명의 실시 예들은 임의의 원하는 유형들의 상이한 암호화 시스템들의 임의의 조합의 사용을 지지한다. 따라서, 구현을 용이하게 하기 위해, "암호화 키"라는 용어는 해당 암호화 키가 사용될 특정 암호 시스템을 식별하는 것으로 이해될 수 있고, 그리고 이러한 정보는 적절한 곳에 저장될 수 있다(예를 들어, 도 7의 특정한 객체 암호화 키(705)에 대한 적절한 암호화 시스템은 도 7의 해시 값(605)과 관련된 도 7의 보안 키 공유 테이블(535)의 엔트리에 저장될 수 있다). 따라서, 명확하게 하기 위해, 보안 중복 제거 관리자(525)는 보안 키 공유 테이블(535) 및 암호화된 객체(1220)에 액세스함에 있어서 서로 다른 암호화 시스템들(및 심지어 서로 다른 암호화 시스템 유형들)을 사용할 수 있다.
이제 도 5로 돌아 가면, 모든 퍼즐의 조각들은 보안 중복 제거 모듈(325)이 어떻게 작동할 수 있는지 이해하기 위해 준비가 되어있다. 사용자로부터의 쓰기 요청을 고려한다. 쓰기 요청이 도착하면, 보안 객체 관리자(510)는 해시 함수(505)를 사용하여 도 4의 데이터 값(415)으로부터 도 6 내지 도 8의 해시 값(605)을 생성할 수 있다. 그런 다음 보안 객체 관리자(510)는 그 사용자에 대한 적절한 사용자 보안 객체 맵이 도 4의 객체 키(410)를 갖는 엔트리를 포함하는지를 확인할 수 있다. 그렇다면, 엔트리는 도 6의 새로운 해시 값(605)으로 업데이트될 수 있다; 그렇지 않은 경우, 새로운 엔트리가 사용자의 보안 객체 맵에 생성되고, 도 6의 객체 키(410)를 도 6의 해시 값(605)에 매핑할 수 있다. 어느 쪽이든, 보안 객체 관리자(510)는 그 후 도 6 내지 도 8의 해시 값(605) 및 도 4의 데이터 값(415)을 보안 중복 제거 관리지(525)에 전달할 수 있다.
그런 다음 보안 중복 제거 관리자(525)는 보안 키 공유 테이블(535)을 복호화하고 그리고 도 7의 해시 값(605)에 대한 보안 키 공유 테이블(535)에 엔트리가 있는지 확인할 수 있다. 도 7의 해시 값(605)에 대한 보안 키 공유 테이블(535)에 엔트리가 전혀 없는 경우, 또는 도 7의 해시 값(605)에 대한 보안 키 공유 테이블(535)에 엔트리가 있으나 사용자가 도 7의 공유 리스트(710)에 있지 않는 경우(이 경우 사용자는 기존 객체에 대한 액세스가 거부되어야 함), 새로운 엔트리는 도 7의 해시 값(605)에 대한 보안 키 공유 테이블(535)에 생성될 수 있다. 적절한 암호화 키는 선택될 수 있고 그리고 보안 키 공유 테이블(535)의 새로운 엔트리에 도 7의 객체 암호화 키(705)로서 저장될 수 있다. 도 4의 데이터 값(415)은 도 7의 객체 암호화 키(705)를 사용하여 암호화될 수 있고, 그리고 도 1의 KV-SSD(120) 상의 주소에 쓰일 수 있다. 새로운 엔트리는 중복 제거 맵(530)에 추가될 수 있고, 도 8의 해시 값(605)을 저장하고 그리고 도 8의 해시 값(605)을 도 8의 주소(805)에 매핑한다. 마지막으로, 도 8의 참조 카운트(810)는, 현재 하나의 객체만이 도 8의 주소(805)에 저장된 값을 참조함을 나타내기 위해, 1로 설정될 수 있다.
한편, 엔트리가 도 7의 해시 값(605)에 대한 보안 키 공유 테이블(535)에 존재하고 그리고 사용자가 도 7의 공유 리스트(710)에 있는 경우, 사용자는 도 7의 액세스 리스트(715)에 추가될 수 있고, 도 8의 참조 카운트(810)는 증가될 수 있다(기존 객체를 단지 참조하여 새로운 객체가 중복 제거되었음을 반영하기 위해).
고려할 가치가 있는 또 다른 사항은 데이터 중복 제거가 발생한 데이터 값들의 덮어쓰기를 처리할 수 있는 방법이다. 두 가지 대안적인 접근들이 있다. 한 가지 접근은 각 사용자가 다른 사용자가 수행할 수 있는 것과는 별도로, 개인 객체를 조작하고 있다고 가정할 수 있다는 원칙을 따르는 것이다. 이 접근에서, 사용자가 도 4의 데이터 값(415)을 새로운 데이터 값으로 덮어쓰려고 시도할 때, 도 4의 데이터 값(415)의 도 7의 해시 값(605)이 공유되면(도 5의 보안 키 공유 테이블(535) 또는 도 5의 중복 제거 맵(530)을 조사하여 찾을 수 있는 바와 같이), 도 4의 데이터 값(415)을 대체하는 대신에, 도 1의 KV-SSD(120)은 새로운 데이터 값을 갖는 새로운 객체를 저장하도록 선택할 수 있다(그리고 오래된 객체의 도 7의 액세스 리스트(715)에서 사용자를 제거하고, 이에 따라 도 8의 참조 카운트(810)를 또한 감소시킨다). 다른 접근은 사용자들이 동일한 객체에 대한 액세스를 공유하고 있다는 것을 인지하고 있다는 원칙을 따르며, 따라서 다른 누군가가 도 4의 데이터 값(415)을 새로운 데이터 값으로 덮어쓰더라도 놀라지 않을 것이다. 어떤 접근이 사용되는지는 정책에 의해 결정될 수 있고 그리고 도 1의 KV-SSD(120)의 특정 구현에 의존할 수 있다: 서로 다른 사용자들이 정책 선호들을 지정하여, 혼합된 접근을 허용하는 것도 가능할 수 있다.
특정 객체 키에 대한 액세스가 없는 사용자가 동일한 키로 객체를 쓰려고 하면, 문제가 발생할 수 있다. 결국, 도 1의 KV-SSD(120)는 동일한 객체 키를 사용하여 여러 객체들이 저장되는 것을 허용하지 않을 수 있다. 예를 들어, 이 문제는 우연히(사용자가 모르는 사이에, 기존 객체 키를 사용하여 객체를 쓰려고 시도하는 경우), 또는 사용자가 공유된 객체를 업데이트하려고 시도할 때 발생할 수 있고, 새로운 객체의 저장을 초래한다(위에서 설명한 정책들 중 하나에 따름). 이것은 관심있는 데이터 값의 식별자로서 도 4의 객체 키(410)보다 도 6 내지 도 8의 해시 값(605)이 사용되는 이유 중 하나이다. 그러나 해시 값이 충돌하는 것도 가능하다: 예를 들어, 동일한 데이터가 객체에 대한 액세스를 공유하지 않는 두 명의 다른 사용자들에 의해 쓰여지는 경우. 이러한 충돌들을 해결하기 위해, 추가적인 열들은 도 5의 사용자 보안 객체 맵들(520-1, 520-2, 및 520-3), 도 5의 보안 키 공유 테이블(535), 및 도 5의 중복 제거 맵(530)에 추가될 수 있다: 예를 들어, 처음에 객체를 쓴 사용자의 식별자가 추가될 수 있다. 그 후, 해시 값 및 처음에 객체를 쓴 사용자의 식별자의 조합은 도 5의 보안 키 공유 테이블(535) 및 도 5의 중복 제거 맵(530)에서 다른 데이터로의 매핑을 위한 소스로 사용될 수 있고, 이는 도 7 내지 도 8의 해시 값(605)에 기초하여 임의의 추가 충돌들을 피해야 한다.
아직 논의되지 않은 또 다른 사항은 도 6 내지 도 8의 해시 값(605)이 사용자가 도 4의 데이터 값(415)을 새로운 데이터 값으로 덮어쓸 때 업데이트되는지 여부이다. 한편으로는, 도 6 내지 도 8의 해시 값(605)은 본질적으로 객체를 식별한다. 객체의 현재 데이터 값과 도 6 내지 도 8의 해시 값(605) 사이에 단절이 있을 수 있음은 특별히 적절하지 않을 수 있다. 다른 한편으로는, 이름 해시 값을 사용함으로써, 도 6 내지 도 8의 해시 값(605)이 도 1의 KV-SSD(120)에 저장된 현재 데이터 값에 대한 해시 함수(505)의 적용을 나타낸다는 암시적 가정이 존재한다. 데이터 값이 변경되면, 도 6 내지 도 8의 해시 값(605)도 변경되어야 한다. 어느 접근이든 원하는대로 사용될 수 있다(도 6 내지 도 8의 해시 값(605)을 변경하는 것은 메시지-잠금 암호화(message-locked encryption)가 사용될 때 도 7의 객체 암호화 키(705)의 식별에 대한 암시들(implications)을 가질 수 있다는 것을 주목하였지만).
이제 사용자로부터의 읽기 요청을 고려한다. 보안 객체 관리자(510)가 읽기 요청을 수신할 때, 보안 객체 관리자(510)는 해당 사용자에 대한 적절한 사용자 보안 객체 맵에 액세스하고 그리고 엔트리가 도 4의 객체 키(410)와 함께 존재하는지 확인할 수 있다. 엔트리가 존재하지 않는 경우, 사용자는 (사용자에 관한 한)존재하지 않는 객체에 대한 액세스를 요청했으므로, 보안 객체 관리자(510)는 오류를 반환할 수 있다.
한편, 사용자의 보안 객체 맵이 도 6의 객체 키(410)에 대한 엔트리를 포함하는 경우, 보안 객체 관리자(510)는 도 6의 객체 키(410)를 도 6의 해시 값(605)에 매핑할 수 있고, 그리고 도 6의 해시 값(605)을 보안 중복 제거 관리자(525)에 전달할 수 있다. 그러면 보안 중복 제거 관리자(525)는 보안 키 공유 테이블(535)에 액세스하여 엔트리가 도 7의 해시 값(605)에 대해 존재하는지를 확인할 수 있다. 사용자의 보안 객체 맵은 객체가 도 6의 객체 키(410)에 대해 존재함을 나타내기 때문에, 이 테스트는 항상 성공해야 한다. 이 테스트가 실패하면, 비정상적인 오류가 발생한 것이다. 보안 중복 제거 관리자(525)는 또한 사용자가 도 7의 공유 리스트(710)(및 가능하면 도 7의 액세스 리스트(715))에 포함되어 있는지를 확인할 수 있다. 다시, 사용자의 보안 객체 맵은 사용자가 객체에 대한 액세스를 가지고 있음을 나타내기 때문에, 이 테스트는 항상 성공해야 한다: 이 테스트가 실패하면, 비정상적인 오류가 발생한 것이다. 이제, 보안 키 공유 테이블(535)이 사용자가 객체에 액세스할 수 있음을 확인했다고 가정하면, 보안 중복 제거 관리자(525)는 도 8의 해시 값(605)을 도 8의 주소 805에 매핑할 수 있고, 도 8의 주소(805)에서 값을 읽을 수 있고, 도 7의 객체 암호화 키(705)를 사용하여 데이터를 복호화할 수 있고, 및 데이터를 사용자에게 반환할 수 있다.
마지막으로, 삭제 요청을 고려한다. 보안 객체 관리자(510)가 삭제 요청을 수신할 때, 보안 객체 관리자(510)는 해당 사용자에 대한 적절한 사용자 보안 객체 맵에 액세스할 수 있고 그리고 엔트리가 도 4의 객체 키(410)와 함께 존재하는지를 확인할 수 있다. 엔트리가 존재하지 않는 경우, 사용자는 (사용자에 관한 한)존재하지 않는 객체에 대한 액세스를 요청했으므로, 보안 객체 관리자(510)는 오류를 반환할 수 있다.
한편, 사용자의 보안 객체 맵이 도 6의 객체 키(410)에 대한 엔트리를 포함하는 경우, 보안 객체 관리자(510)는 도 6의 객체 키(410)를 도 6의 해시 값(605)에 매핑할 수 있고, 그리고 도 6의 해시 값(605)을 보안 중복 제거 관리자(525)에 전달할 수 있다. 그 다음, 보안 객체 관리자(510)는 사용자의 보안 객체 맵에서 엔트리를 삭제할 수 있다. 그 다음, 보안 중복 제거 관리자(525)는 보안 키 공유 테이블(535)에 액세스하여 엔트리가 도 7의 해시 값(605)에 대해 존재하는지를 확인할 수 있다. 사용자의 보안 객체 맵은 객체가 도 6의 객체 키(410)에 대해 존재함을 나타내기 때문에, 이 테스트는 항상 성공해야 한다. 이 테스트가 실패하면, 비정상적인 오류가 발생한 것이다. 보안 중복 제거 관리자(525)는 또한 사용자가 도 7의 공유 리스트(710)(및 가능하면 도 7의 액세스 리스트(715))에 포함되어 있는지를 확인할 수 있다. 다시, 사용자의 보안 객체 맵은 사용자가 객체에 대한 액세스를 가지고 있음을 나타내므로, 이 테스트는 항상 성공해야 한다. 이 테스트가 실패하면, 비정상적인 오류가 발생한 것이다. 이제, 보안 키 공유 테이블(535)이 사용자가 객체에 접근할 수 있음을 확인했다고 가정하면, 보안 중복 제거 관리자(525)는 도 8의 해시 값(605)을 도 8의 참조 카운트(810)에 매핑할 수 있고, 그리고 도 8의 참조 카운트(810)를 감소시킬 수 있다. 이제 도 8의 참조 카운트(810)가 0이면, 보안 중복 제거 관리자(525)는 또한 도 8의 주소(805)에 저장된 데이터를 무효화할 수 있고 그리고 도 7 내지 도 8의 해시 값(605)으로부터 보안 키 공유 테이블(535) 및 중복 제거 맵(530)의 다른 데이터에 매핑되는 엔트리들을 제거할 수 있다. 그러면 보안 중복 제거 관리자(525)는 객체가 성공적으로 삭제되었음을 나타내는 응답을 사용자에게 전송할 수 있다.
위의 모든 논의는 하나의 기본 원리를 중심으로 한다: 사용자가 도 1의 KV-SSD(120)로부터 데이터를 읽기(또는 데이터 삭제)하기 전에, 먼저 도 1의 KV-SSD(120)에 데이터 쓰기를 해야 한다. 데이터가 사용자들 간에 공유되어 질 수 있는 것은 이러한 원칙을 변경하지 않는다: 최신 운영 체제들의 경우에도 사용자는 일반적으로 그들이 데이터로 무엇인가를 하기 전에 원본 파일에 대한 최소한의 링크(심볼릭(symbolic) 또는 하드(hard))를 만들어야 한다.
그러나 한 사용자로부터 다른 사용자에게 파일을 공유하는 단순한 행위만으로도 제2(두 번째) 사용자가 파일에 액세스하기 충분하다면 어떨까? 결국, 도 1의 KV-SSD(120)에서, 객체에 접근하기 위해 필요한 모든 것은 도 4의 객체 키(410)이고, 이는 누구나 가질 수 있다. 따라서, 사용자가 아직 객체의 사본을 도 1의 KV-SSD(120)에 쓰지 않았을지라도, 도 4의 객체 키(410)를 인지함으로써 및 도 7의 공유 리스트(710)에 있음으로써, 사용자는 먼저 객체를 쓰는 것 없이 객체에 액세스할 수 있어야 한다: 즉, 사용자는 객체를 읽거나 및/또는 삭제할 수 있다.
본 발명의 이러한 실시 예들에서, 앞서 설명된 본 발명의 실시 예들과 관련하여 일부 변화들이 있다. 먼저, 도 5의 사용자 보안 객체 맵들(520-1, 520-2, 및/또는 520-3)의 엔트리는 사용자가 객체를 읽거나 삭제하도록 허용되어져야 하는지 여부를 결정하는데 반드시 충분하지 않을 수 있다. 결국, 사용자가 도 1의 KV-SSD(120)에 객체를 쓸 때만 엔트리가 도 5의 사용자 보안 객체 맵들(520-1, 520-2, 및/또는 520-3)에 배치되는 경우, 도 5의 사용자 보안 객체 맵들(520-1, 520-2, 및/또는 520-3)에서 엔트리의 부재는 사용자가 도 1의 KV-SSD(120)에 객체를 쓰지 않았음을 의미할 뿐이고, 그러나 객체에 액세스할 수 있는 권한이 없다는 것은 아니다. 두 가지 명백한 해결책들이 있다. 하나는 다른 사용자와 객체를 공유하는 행위가 해당 객체에 대한 해당 사용자의 사용자 보안 객체 테이블에 엔트리를 자동으로 추가하는 규칙을 수립하는 것이다. 다른 하나는 도 5의 사용자 보안 객체 맵들(520-1, 520-2, 및/또는 520-3) (또는 적어도 도 5의 개별 사용자 보안 객체 맵들(520-1, 520-2, 및/또는 520-3), 그리고 대신 객체 키들에서 해시 값들로의 전역 맵(global map)을 가짐)을 제거하고, 그리고 대신 객체 키들을 도 7의 보안 키 공유 테이블(535) 내의 해시 값에 매핑한다. 그러면, 사용자가 객체에 대한 액세스를 갖고 있는지 여부를 결정하는 것은 단순히 도 7의 보안 키 공유 테이블(535)에서 엔트리를 찾아내고, 도 7의 공유 리스트(710)를 식별하고, 및 사용자의 식별자가 도 7의 공유 리스트(710)에 있는지 확인함으로써 결정될 수 있다. 사용자가 객체에 액세스하는 권한을 가진 경우, 동작들은 달리 변경되지 않고 진행될 수 있다; 사용자가 객체에 대한 액세스하는 권한을 가지지 않으면, 오류가 반환될 수 있다.
도 13은 본 발명의 실시 예에 따른, 도 1의 KV-SSD(120)가 사용자의 쓰기 요청을 처리하는 예시적인 절차의 흐름도를 도시한다. 도 13에서, 1305 블록에서, 도 1의 KV-SSD(120)는 도 1의 KV-SSD(120)에 객체를 쓰기 위해 사용자로부터 쓰기 요청을 수신할 수 있다. 1310 블록에서, 도 5의 보안 객체 관리자(510)는 도 5의 해시 함수(505)를 사용하여 도 4의 데이터 값(415)로부터 도 6 내지 도 8의 해시 값(605)을 계산할 수 있다. 1315 블록에서, 도 5의 보안 객체 관리자(510)는 사용자에 대한 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)을 업데이트하여 도 6의 객체 키(410)를 도 6의 해시 값(605)에 매핑할 수 있다. 1320 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 7의 객체 암호화 키(705)를 사용하여 도 4의 데이터 값(415)을 암호화할 수 있다.
1325 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 5의 보안 키 공유 테이블(535)을 업데이트하여 도 7의 해시 값(605)을 도 7의 객체 암호화 키(705)에 매핑할 수 있다. 1330 블록에서, 도 5의 보안 중복 제거 관리자(525)는 암호화된 데이터 값을 도 1의 KV-SSD(120) 상의 도 8의 주소(805)에 쓸 수 있다. 1335 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 5의 중복 제거 맵(530)을 업데이트하여 도 8의 해시 값(605)을 도 8의 주소(805)에 매핑할 수 있다. 도 5의 보안 중복 제거 관리자(525)는 또한 도 5의 중복 제거 맵(530)을 업데이트하여 도 8의 주소(805)에 저장된 데이터를 참조하는 새로운 객체를 식별하기 위해 도 8의 참조 카운트(810)를 증가시킬 수 있다. (이 문맥에서, 여기 및 다른 곳에서, "업데이트"는 반드시 값들이 변경되는 것을 의미하지는 않는다. 예를 들어, 사용자가 도 1의 KV-SSD(120)에 이미 존재하는 객체의 사본을 쓰고 있고 그리고 도 8의 참조 카운트(810)는 실제로 도 5의 보안 키 공유 테이블(535)에 저장된 경우, 도 5의 중복 제거 맵(530)은 실제로 변경되지 않을 수 있다.) 마지막으로, 1340 블록에서, 도 5의 보안 중복 제거 모듈(325)은 사용자에게 도 4의 객체(405)가 도 1의 KV-SSD(120)에 성공적으로 쓰여졌음에 대한 응답을 전송할 수 있다.
도 14는 도 5의 보안 객체 관리자(510)가 도 5의 사용자 보안 객체 맵들(520-1, 520-2, 및 520-3)을 사용하는 예시적인 절차의 흐름도를 도시한다. 도 14에서, 1405 블록에서, 도 5의 보안 객체 관리자(510)는 사용자 키(및 가능하면 사용자 식별자)를 수신할 수 있다. 1405 블록은, 예를 들어, 사용자가 도 1의 KV-SSD(120)에 엑세스를 시도하는 장치에 처음 로그인할 때 발생할 수 있다. 1410 블록에서, 도 5의 보안 객체 관리자(510)는 스토리지로부터 도 5의 암호화된 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)을 검색(회수)할 수 있다. 1415 블록에서, 도 5의 보안 객체 관리자(510)는 사용자 키를 사용해서 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)을 복호화할 수 있다
1402 블록에서, 도 5의 보안 객체 관리자(510)는 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)에 대한 동작들을 수행할 수 있다. 이러한 동작들의 예들은 도 13의 1315 블록에 도시된 바와 같이, 도 6의 해시 값(605)에 도 6의 객체 키(410)를 매핑하기 위해서 도 5의 사용자 보안 객체 맵(520-1. 520-2, 또는 520-3)을 업데이트하는 것을 포함할 수 있다: 다른 예들(아래에서 논의된)은 도 4의 객체 키(410)를 수신하는 것 및 도 6의 해시 값(605)에 도 6의 객체 키(410)를 매핑하기 위해서 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)을 사용하는 것(도 1의 KV-SSD(120)로부터 도 4의 객체(405)를 읽을 때 발생할 수 있는 바와 같이)을 포함할 수 있고, 또는 도 6의 객체 키(410)에서 도 6의 해시 값(605)으로의 매핑을 삭제하는 것(도 1의 KV-SSD(120)로부터 도 4의 객체(405)를 삭제할 때 발생할 수 있는 바와 같이)을 포함할 수 있다.
결국, 도 1의 KV-SSD(120)는 1425 블록에 도시된 바와 같이, 사용자가 장치에서 로그 아웃했다는 메시지를 수신할 수 있다. 1430 블록에서, 도 5의 보안 객체 관리자(510)는 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)을 암호화할 수 있고, 그리고 1435 블록에서 도 5의 보안 객체 관리자(510)는 도 5의 암호화된 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)을 다시 스토리지에서 쓸 수 있다. 마지막으로, 1440 블록에서, 도 5의 보안 객체 관리자(510)는 도 1의 KV-SSD(120)로부터 사용자 키 및 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)을 제거할 수 있고, 따라서 도 1의 KV-SSD(120)를 변경(조작)하려는 어느 누구도 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)을 복호화할 수 없다.
도 15는 도 5의 보안 객체 관리자(510)가 사용자 보안 객체 맵들(520-1, 520-2, 및 520-3)을 업데이트하는 예시적인 절차의 흐름도를 도시한다. 도 15에서, 1505 블록에서, 도 5의 보안 객체 관리자(510)는 엔트리가 도 6의 객체 키(410)에 대한 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)에 존재하는지 여부를 결정할 수 있다. 엔트리가 도 4의 객체 키(410)에 대한 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)에 존재한다면, 그 후 1510 블록에서, 도 5의 보안 객체 관리자(510)는 해당 엔트리의 오래된 해시 값을 도 6의 새로운 해시 값(605)(도 4의 데이터 값(415)을 해싱하는 도 5의 해시 함수(505)에 의해 생성됨)으로 대체함으로써 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)을 업데이트할 수 있다. 그렇지 않으면, 1515 블록에서, 도 5의 보안 객체 관리자(510)는 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)에 새로운 엔트리를 추가하여, 도 6의 해시 값(605)(다시, 도 4의 데이터 값(415)을 해싱하는 도 5의 해시 함수(505)에 의해 생성됨)에 도 4의 객체 키(410)를 매핑할 수 있다.
도 16은 도 5의 보안 중복 제거 관리자(525)가 도 5의 중복 제거 맵(530)을 사용하는 예시적인 절차의 흐름도를 도시한다. 도 16에서, 1605 블록에서, 도 5의 보안 중복 제거 관리자(525)는 스토리지로부터 도 5의 중복 제거 맵(530)을 검색(회수)할 수 있다. 본 발명의 실시 예에 따라, 도 5의 중복 제거 맵(530)은 암호화되거나 또는 되지 않고 저장될 수 있다. 1610 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 9의 장치 암호화 키(915)를 사용하여 도 5의 암호화된 중복 제거 맵(530)을 복호화할 수 있다. 1610 블록은 점선(1615)으로 표시된 것과 같이, 도 5의 중복 제거 맵(530)이 암호화되지 않는다면, 생략될 수 있다.
1620 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 5의 중복 제거 맵(530)에 대한 동작들을 수행할 수 있다. 이러한 동작들의 예들은, 도 13의 1335 블록에 도시된 바와 같이, 도 8의 주소(805)에 도 8의 해시 값(605)을 매핑하기 위해 도 5의 중복 제거 맵(530)을 업데이트하는 것을 포함할 수 있다: 다른 예들(아래에서 논의됨)은 도 8의 해시 값(605)을 수신하는 것 및 도 8의 해시 값(605)으로부터 매핑된 바와 같이 도 8의 주소(805)를 결정하는 것(도 1의 KV-SSD(120)로부터 도 4의 객체(405)를 읽을 때 발생할 수 있는 바와 같이), 도 8의 참조 카운트(810)를 증가 또는 감소하는 것(도 4의 객체(405)가 도 1의 KV-SSD(120)로부터 쓰여지거나 삭제될 때 발생할 수 있는 바와 같이), 또는 도 8의 해시 값(605)에서 도 5의 중복 제거 맵(530)의 도 8의 주소(805)로의 매핑을 삭제하는 것(도 1의 KV-SSD(120)로부터 도 4의 객체(405)를 삭제할 때 발생할 수 있는 바와 같이)을 포함할 수 있다.
도 5의 보안 중복 제거 관리자(525)가 현재 트랜잭션(transaction)에 대해 도 5의 중복 제거 맵(530)을 사용하여 완료되면, 도 5의 보안 중복 제거 관리자(525)는 1625 블록에 표시된 대로, 도 9의 장치 암호화 키(915)를 사용하여 도 5의 중복 제거 맵(530)을 암호화할 수 있다. 다시, 도 5의 중복 제거 맵(530)이 암호화되지 않고 저장된다면, 1625 블록은 점선(1630)으로 도시된 바와 같이, 생략될 수 있다. 마지막으로 1635 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 1의 KV-SSD(120)의 스토리지에 도 5의 중복 제거 맵(530)(본 발명의 실시 예에 따라, 암호화되거나 암호화되지 않음)을 저장할 수 있다.
도 17은 도 5의 보안 중복 제거 관리자(525)가 도 5의 보안 키 공유 테이블(535)을 사용하는 예시적인 절차의 흐름도를 도시한다. 도 17에서, 1705 블록에서, 도 5의 보안 중복 제거 관리자(525)는 스토리지로부터 도 5의 보안 키 공유 테이블(535)을 검색(회수)할 수 있다. 도 16을 참조하여 위에서 논의된 바와 같은 도 5의 중복 제거 맵(530)과는 달리, 도 5의 보안 키 공유 테이블(535)은 암호화되어 저장되어야 한다. 1710 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 9의 장치 암호화 키(915)를 사용하여 암호화된 도 5의 보안 키 공유 테이블(535)을 복호화할 수 있다.
1715 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 5의 보안 키 공유 테이블(535)에 대한 동작들을 수행할 수 있다. 이러한 동작들의 예들은, 도 13의 1325 블록에 도시된 바와 같이, 도 7의 객체 암호화 키(705)에 도 7의 해시 값(605)을 매핑하기 위해 도 5의 보안 키 공유 테이블(535)을 업데이트하는 것을 포함할 수 있다: 다른 예들(아래에서 논의 됨)은 도 7의 해시 값(605)을 수신하는 것 및 도 7의 해시 값(605)로부터 매핑된 바와 같이 도 7의 객체 암호화 키(705)를 결정하는 것(도 1의 KV-SSD(120)로부터 도 4의 객체(405)를 읽을 때 발생할 수 있음), 공유 및 액세스 리스트들이 변경함에 따라, 도 7의 공유 리스트(710) 및/또는 도 7의 액세스 리스트(715)로부터 사용자를 추가 또는 제거하는 것(도 1의 KV-SSD(120)로부터 도 4의 객체(405)가 쓰여지거나 삭제될 때 발생할 수 있음), 또는 도 5의 보안 키 공유 테이블(535)에서 도 7의 해시 값(605)으로부터 도 7의 객체 암호화 키(705)로의 매핑을 삭제하는 것(도 1의 KV-SSD(120)로부터 도 4의 객체(405)를 삭제할 때 발생할 수 있음)을 포함할 수 있다.
도 5의 보안 중복 제거 관리자(525)가 현재 트랜잭션에 대해 도 5의 보안 키 공유 테이블(535)을 사용하여 완료되면, 도 5의 보안 중복 제거 관리자(525)는 1720 블록에 도시된 바와 같이, 도 9의 장치 암호화 키(915)를 사용하여 도 5의 보안 키 공유 테이블(535)을 암호화할 수 있다. 마지막으로, 1725 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 1의 KV-SSD(120)의 스토리지에 도 5의 암호화된 보안 키 공유 테이블(535)을 저장할 수 있다.
도 18은 도 5의 보안 중복 제거 관리자(525)가 도 5의 보안 키 공유 테이블(535)에 새로운 매핑을 추가하는 예시적인 절차의 흐름도를 도시한다. 도 18에서, 1805 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 7의 해시 값(605)을 도 7의 객체 암호화 키(705)에 매핑할 수 있다.
이 시점에서, 다양한 대안들이 존재하고, 어느 것도 상호 배타적이지 않다(즉, 그들 중 어느 것도 수행될 수 없고, 그들 중 임의로 수행될 수 있고, 또는 그들 중 모두 수행될 수 있음). 1810 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 8의 참조 카운트(810)를 1로 초기화할 수 있고, 블록 1815에서 도 5의 보안 중복 제거 관리자(525)는 새롭게 초기화된 도 8의 참조 카운트(810)에 도 8의 해시 값(605)을 매핑할 수 있다. 대안적으로, 1820 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 7의 공유 리스트(710)에 도 7의 해시 값(605)을 매핑할 수 있고, 1825 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 7의 액세스 리스트(715)에 도 6의 해시 값(605)을 매핑할 수 있다. (물론, 액세스 리스트(715)가 도 5의 보안 키 공유 테이블(535)로부터 생략된다면, 1825 블록은 도 18로부터 생략될 수 있음).
도 19a 및 도 19b는 도 5의 보안 중복 제거 관리자(525)가 도 5의 보안 키 공유 테이블(535)을 업데이트하는 예시적인 절차의 흐름도를 도시한다. 도 19a에서, 1905 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 7의 공유 리스트(710)에 도 7의 해시 값(605)을 매핑할 수 있다. 1910 블록에서, 도 5의 보안 중복 제거 관리자(525)는 사용자가 도 7의 공유 리스트(710)에 나열되었는지를 확인할 수 있다. 사용자가 도 7의 공유 리스트(710)에 없다면, 1915 블록에서 도 5의 보안 중복 제거 관리자(525)는 도 5의 보안 키 공유 테이블(535)에 도 6의 해시 값(605)으로부터 도 4의 객체(405)에 대한 암호화 키로의 새로운 매핑을 추가할 수 있다 (그리고, 도 13을 참조하여 위에서 논의된 바와 같이, 도 1의 KV-SSD(120)에 도 4의 객체(405)의 새로운 사본을 또한 저장할 수 있고, 이는 또한 도 5의 중복 제거 맵(530)에 새로운 엔트리를 추가하는 것을 포함할 수 있다.).
한편, 사용자가 도 7의 공유 리스트(710)에 있다면, 1920 블록에서(도 19b), 도 5의 보안 중복 제거 관리자(525)는 도 5의 중복 제거 맵(530)에서 도 8의 참조 카운트(810)에 도 8의 해시 값(605)을 매핑할 수 있다. 1925 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 5의 중복 제거 맵(530)에서 도 8의 참조 카운트(810)를 증가시킬 수 있다. 그 다음, 1930 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 7의 액세스 리스트(715)에 도 7의 해시 값(605)을 매핑할 수 있고, 그리고 1935 블록에서 도 5의 보안 중복 제거 관리자(525)는 도 7의 액세스 리스트(715)에 사용자를 추가할 수 있다. 사용자가 이미 도 7의 액세스 리스트(715)에 존재하더라도 도 7의 액세스 리스트(715)에 사용자를 추가하는 것은 가치가 있을 수 있다: 도 7의 액세스 리스트(715)에서 사용자의 각 존재(발생)는 도 1의 KV-SSD(120)에 사용자에 의해 “쓰여진(written)”다른 객체를 나타낼 수 있고, 이는 도 8의 참조 카운트(810)에 영향을 미칠 수 있다. 사용자가 도 1의 KV-SSD(120)에 객체의 “쓰여진(written)”다중 사본들을 가졌음에도 불구하고, 도 7의 액세스 리스트(715)가 사용자에 대한 하나의 참조만을 포함한다면, 사용자가 더 이상 도 1의 KV-SSD(120)에서 객체의 “사본들”을 소유하지 않을 때(따라서 사용자가 도 7의 액세스 리스트(715)으로부터 제거될 수 있을 때)를 결정하는 것은 어려울 수 있다(도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)에 대한 참조 없이).
도 20a 내지 도 20c는 본 발명의 실시 예에 따라, 도 1의 KV-SSD(120)가 사용자로부터 읽기 요청을 처리하는 예시적인 절차의 흐름도를 도시한다. 도 20a에서, 2005 블록에서, 도 1의 KV-SSD(120)는 사용자로부터 읽기 요청을 수신할 수 있다. 2010 블록에서, 도 5의 보안 객체 관리자(510)는 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)을 사용하여 도 6의 해시 값(605)에 도 6의 객체 키(410)를 매핑하는 것을 시도할 수 있다. 2015 블록에서, 도 5의 보안 객체 관리자(510)는 도 5의 사용자 보안 객체 맵((520-1, 520-2, 또는 520-3)이 도 6의 객체 키(410)에서 도 6의 해시 값(605)으로의 매핑을 포함하는지 여부를 결정할 수 있다. 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)이 도 6의 객체 키(410)에서 도 6의 해시 값(605)으로의 매핑을 포함하지 않는다면, 그 다음 2020 블록에서 도 5의 보안 중복 제거 모듈(325)은 사용자가 도 1의 KV-SSD(120)에 존재하지 않는 객체(또는 사용자가 엑세스를 갖지 않는 객체, 비록 보안 상의 이유들로 사용자에게 도 1의 KV-SSD(120)에 그러한 객체가 존재하는지 여부에 대해 알려지면 안되지만)를 읽으려고 시도하였음을 나타내는 오류 메시지를 반환할 수 있다
2025 블록(도 20b)에서, 도 5의 보안 중복 제거 관리자(525)는 도 5의 보안 키 공유 테이블(535)을 사용하여 도 7의 공유 리스트(710)에 도 7의 해시 값(605)을 매핑할 수 있다. 2030 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 7의 공유 리스트(710)가 사용자를 포함하는지 여부를 결정한다. 도 7의 공유 리스트(710)가 사용자를 포함하지 않으면(사용자가 객체에 액세스하는 권한이 없음을 나타냄), 도 5의 보안 중복 제거 관리자(525)는 사용자에게 오류 메시지를 반환하기 위해 2020 블록(도 20a)으로 돌아갈 수 있다. 이 테스트는 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)이 객체에 대한 엔트리를 가지고 있기 때문에(사용자가 객체의 사본을 소유하지 않은 경우 존재하지 않을 수 있음), 일반적으로 성공해야 한다. 또한 도 5의 보안 중복 제거 관리자(525)는 도 7의 해시 값(605)으로부터 도 7의 공유 리스트(710)로의 매핑이 없는 경우, 이 점에서 오류를 또한 반환할 수도 있다.
도 7의 공유 리스트(710)가 사용자를 포함하면, 2035 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 7의 액세스 리스트(715)에 도 6의 해시 값(605)을 매핑하고, 그리고 2040 블록에서 도 5의 보안 중복 제거 관리자(525)는 도 7의 액세스 리스트(715)가 사용자를 포함하는지를 결정한다. 도 7의 액세스 리스트(715)가 사용자를 포함하지 않는다면(사용자가 객체를 능동적으로 공유하고 있지 않음을 나타냄), 도 5의 보안 중복 제거 관리자(525)는 사용자에게 오류 메시지를 반환하기 위해 2020 블록(도 20a)으로 돌아갈 수 있다. 이 테스트는 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)이 객체에 대한 엔트리를 가지고 있기 때문에(사용자가 객체의 사본을 소유하지 않은 경우 존재하지 않을 수 있음), 일반적으로 성공해야 한다. 또한 도 5의 보안 중복 제거 관리자(525)는 도 7의 해시 값(605)으로부터 도 7의 액세스 리스트(715)로의 매핑이 없는 경우, 이 지점에서 오류를 반환할 수도 있다.
사용자가 객체에 대한 액세스를 가지고 있다면, 2045 블록(도 20c)에서, 도 5의 보안 중복 제거 관리자(525)는 도 5의 중복 제거 맵(530)을 사용하여 도 8의 주소(805)에 도 8의 해시 값(605)을 매핑할 수 있다. 2050 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 8의 주소(805)로부터 도 4의 암호화된 데이터 값(415)을 읽을 수 있다. 2055 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 7의 객체 암호화 키(705)에 도 7의 해시 값(605)을 매핑할 수 있다. 2060 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 7의 객체 암호화 키(705)를 사용하여 도 4의 암호화된 데이터 값(415)을 복호화할 수 있다. 마지막으로, 2065 블록에서, 도 5의 보안 중복 제거 모듈(325)은 도 4의 (복호화된) 데이터 값(415)을 사용자에게 반환할 수 있다.
도 21a 내지 도 21d는 본 발명의 실시 예에 따라, 도 1의 KV-SSD(120)가 사용자로부터 삭제 요청을 처리하는 예시적인 절차의 흐름도를 도시한다. 도 21a에서, 2103 블록에서, 도 1의 KV-SSD(120)는 사용자로부터 삭제 요청을 수신할 수 있다. 2106 블록에서, 도 5의 보안 객체 관리자(510)는 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)을 사용하여 도 6의 해시 값(605)에 도 6의 객체 키(410)를 매핑하려고 시도할 수 있다. 2109 블록에서, 도 5의 보안 객체 관리자(510)는 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)이 도 6의 객체 키(410)로부터 도 6의 해시 값(605)으로의 매핑을 포함하는지를 결정할 수 있다. 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)이 도 6의 객체 키(410)로부터 도 6의 해시 값(605)으로의 매핑을 포함하지 않는다면, 그 다음 2112 블록에서 도 5의 보안 중복 제거 모듈(325)은 사용자가 도 1의 KV-SSD(120)에 존재하지 않는 객체(또는 사용자가 엑세스를 갖지 않는 객체, 비록 보안 상의 이유들로 사용자에게 도 1의 KV-SSD(120)에 그러한 객체가 존재하는지 여부에 대해 알려지면 안되지만)를 읽으려고 시도하였음을 나타내는 오류 메시지를 반환할 수 있다.
2115 블록(도 21b)에서, 도 5의 보안 중복 제거 관리자(525)는 도 5의 보안 키 공유 테이블(535)을 사용하여 도 7의 공유 리스트(710)에 도 7의 해시 값(605)을 매핑할 수 있다. 2118 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 7의 공유 리스트(710)가 사용자를 포함하는지를 결정한다. 도 7의 공유 리스트(710)가 사용자를 포함하지 않는다면(사용자가 객체에 대한 액세스 권한이 없음을 나타냄), 도 5의 보안 중복 제거 관리자(525)는 사용자에게 오류 메시지를 반환하기 위해 2112 블록(21a)으로 돌아갈 수 있다. 이 테스트는 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)이 객체에 대한 엔트리를 가지고 있기 때문에(사용자가 객체의 사본을 소유하지 않은 경우 존재하지 않을 수 있음), 일반적으로 성공해야 한다. 또한 도 5의 보안 중복 제거 관리자(525)는 도 7의 해시 값(605)으로부터 도 7의 공유 리스트(710)로의 매핑이 없는 경우, 이 지점에서 오류를 반환할 수도 있다.
도 7의 공유 리스트(710)가 사용자를 포함하면, 2121 블록에서 도 5의 보안 중복 제거 관리자(525)는 도 7의 액세스 리스트(715)에 도 6의 해시 값(605)을 매핑하고, 그리고 2124 블록에서 도 5의 보안 중복 제거 관리자(525)는 도 7의 액세스 리스트(715)가 사용자를 포함하는지를 결정한다. 도 7의 액세스 리스트(715)가 사용자를 포함하지 않는다면(사용자가 객체를 능동적으로 공유하고 있지 않음을 나타냄), 도 5의 보안 중복 제거 관리자(525)는 사용자에게 오류 메시지를 반환하기 위해 2112 블록(21a)으로 돌아갈 수 있다. 이 테스트는 도 5의 사용자 보안 객체 맵(520-1, 520-2, 또는 520-3)이 객체에 대한 엔트리를 가지고 있기 때문에(사용자가 객체의 복사본을 소유하지 않은 경우 존재하지 않을 수 있음), 일반적으로 성공해야 한다. 또한 도 5의 보안 중복 제거 관리자(525)는 도 7의 해시 값(605)으로부터 도 7의 액세스 리스트(715)로의 매핑이 없는 경우, 이 지점에서 오류를 반환할 수도 있다.
사용자가 객체에 액세스할 수 있다고 가정하면, 2127 블록(도 21c)에서, 도 5의 보안 중복 제거 관리자(525)는 도 5의 보안 키 공유 테이블(535)의 도 7의 액세스 리스트(715)로부터 사용자를 제거할 수 있다. 2130 블록에서, 도 5의 보안 객체 관리자(510)는 도 6의 객체 키(410)에서 도 6의 해시 값(605)으로의 매핑을 제거할 수 있다. 2133 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 5의 중복 제거 맵(530)을 사용하여 도 8의 참조 카운트(810)에 도 8의 해시 값(605)을 매핑할 수 있다. 2136 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 8의 참조 카운트(810)를 감소시킬 수 있다.
2139 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 8의 참조 카운트(810)가 0인지 여부를 결정할 수 있다. 도 8의 참조 카운트(810)가 0이 아니라면, 처리는 완료된다. 그렇지 않으면, 2142 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 8의 주소(805)에 도 8의 해시 값(605)을 매핑할 수 있고, 그리고 2145 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 8의 주소(805)에 저장된 데이터 값을 삭제할 수 있다.
계속해서 2148 블록(도 21d)에서, 도 5의 보안 중복 제거 관리자(525)는 도 8의 해시 값(605)에서 도 8의 주소(805)로의 매핑을 제거할 수 있다. 2151 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 5의 중복 제거 맵(530)에서 도 8의 해시 값(605)에서 도 8의 참조 카운트(810)로의 매핑을 제거할 수 있다. 2154 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 5의 보안 키 공유 테이블(535)에서 도 7의 해시 값(605)에서 도 7의 객체 암호화 키(705)로의 매핑을 제거할 수 있다. 2157 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 5의 보안 키 공유 테이블(535)에서 도 7의 해시 값(605)에서 도 7의 공유 리스트(710)로의 매핑을 제거할 수 있다. 2160 블록에서, 도 5의 보안 중복 제거 관리자(525)는 도 7의 해시 값(605)에서 도 7의 공유 리스트(715)로의 매핑을 제거할 수 있다. 마지막으로, 2163블록에서, 도 5의 보안 중복 제거 모듈(325)은 객체가 삭제되었다는 확인을 사용자에게 보낼 수 있다.
주목할 가치가 있는 마지막 일반적인 사항은 위에서 설명한 동작들이 중복 제거 보안 KV 장치들과 관련된다는 것이다. 그러나 이 사실은 암시적인 가정을 포함한다: 보안 KV 장치에 저장된 모든 데이터는 안전하게 저장되도록 의도된다. 이 가정은 항상 사실은 아니다: 즉, 안전하지 않은 것으로 간주되는 데이터가 보안 KV 장치에 저장될 수 있다. 안전하지 않은 객체가 KV 장치에 저장된다면, 데이터 중복 제거는 통상적인 KV 장치와 같이 발생할 수 있다: 임의의 사용자는 보안 문제가 존재하지 않는 경우 특정 객체 키와 관련된 데이터를 쓸 수 있고(또는 덮어씀), 특정 객체 키와 관련된 데이터를 읽을 수 있고, 그리고 특정 객체 키를 삭제할 수 있다. 이 사실은 또한 여러 사용자들이 보안 KV 장치에 동일한 비-보안(non-secure) 객체들을 쓰려고 시도하면, 임의의 보안 고려사항들과 관계없이 데이터 중복 제거가 해당 객체들에 대해 수행될 수 있음을 의미한다. 그러나 이러한 변형은 오직 비-보안 데이터 객체들에만 적용된다: 상술한 바와 같이, 모든 보안 데이터 객체는 도 5의 보안 중복 제거 모듈(325)의 동작들을 따라야 한다.
도 13 내지 도 21d에서, 본 발명의 실시 예들이 도시되어 있다. 그러나 당업자는 블록들의 순서를 변경함으로써, 블록들을 생략함으로써, 또는 도면들에 표시되지 않은 링크들을 포함함으로써 본 발명의 다른 예들도 가능함을 인식할 것이다. 흐름도들의 이러한 모든 변형들은 명확하게 설명되었는지 여부에 관계없이 본 발명의 실시 예들로 간주된다.
본 발명의 실시 예들은 이전 기술에 비해 기술적 이점들을 제공한다. 통상의 시스템들에서, 데이터 중복 제거는 보안을 고려하지 않거나(가능한 모든 데이터 중복 제거가 수행됨) 또는 데이터 중복 제거는 보안 고려사항들에 전적으로 따른다(사용자들에 걸쳐 데이터 중복 제거가 수행되지 않음). 본 발명의 실시 예들은 데이터 중복 제거를 보안 고려사항들에 따르는 것을 허용하지만 그러나 두 사용자들이 모두 객체에 액세스할 수 있다면, 여전히 교차-사용자 데이터 중복 제거(cross-user data deduplication)를 허용한다. 따라서, 데이터 중복 제거는 다른 사용자들에 의해 소유되고 그리고 데이터를 공유하지 않은 보안 KV 장치에 있는 동일한 데이터의 두 사본들 간에 발생하지 않을 것이다. 그러나 두 사용자들이 데이터에 대한 액세스를 공유한 경우, 데이터 중복 제거는 계속 발생할 수 있다. 또한, 본 발명의 실시 예들은 또한 객체의 소유자가 해당 사용자와 객체에 대한 액세스를 공유하는 한, 사용자에 의해 소유되지(또는 연관되지) 않은 암호화 키를 사용하여 데이터 값이 암호화될 수 있는 객체에 사용자가 액세스할 수 있게 한다. 따라서 각 사용자는 보안 KV 장치에서 데이터 중복 제거의 결과로 동일한 공유된 객체를 조작할 수 있다.
다음 논의는 본 발명의 특정 측면들이 구현될 수 있는 적합한 기계 또는 기계들에 대한 간략하고, 일반적인 설명을 제공하기 위해 의도된다. 기계 또는 기계들은 적어도 부분적으로, 키보드들, 마우스들 등과 같은, 통상의 입력 장치들로부터의 입력뿐만 아니라, 다른 기계로부터 수신된 지시들, 가상현실(VR) 환경과의 상호작용, 생체인식 피드백, 또는 다른 기타 입력 신호에 의해 제어될 수 있다. 본 명세서에서 사용되는 용어인 “기계(machine)”는 단일 기계, 가상 기계, 또는 기계들, 가상 기계들, 또는 함께 작동하는 장치들이 통신적으로 결합된 시스템을 광범위하게 포함하는 것으로 의도된다. 예시적인 기계들은 개인용 컴퓨터들, 워크스테이션들(workstations), 서버들, 휴대용 컴퓨터들, 핸드헬드(handheld) 장치들, 전화기들, 태블릿들 등과 같은 컴퓨팅 장치들뿐만 아니라 예를 들어, 자동차들, 기차들, 택시들 등의, 개인 또는 대중 교통 수단과 같은, 운송 장치들을 포함한다.
기계 또는 기계들은 프로그램 가능하거나 프로그램 불가능한 논리 장치들 또는 어레이들, ASICs(Application Specific Integrated Circuits), 임베디드 컴퓨터들(embedded computers), 스마트 카드들, 등과 같은 임베디드 컨트롤러들(embedded controllers)을 포함할 수 있다. 기계 또는 기계들은 네트워크 인터페이스, 모뎀 또는 다른 통신적인 결합(communicative coupling)과 같은, 하나 이상의 원격 기계들에 대한 하나 이상의 연결들을 활용할 수 있다. 기계들은 인트라넷, 인터넷, 근거리 통신망들, 광역 통신망들 등과 같은, 물리적 및/또는 논리적 네트워크를 통해 상호 연결될 수 있다. 당업자는 네트워크 통신이 RF(radio frequency), 위성, 마이크로파, IEEE(Institute of Electrical and Electronics Engineers) 802.11, Bluetooth®, 광학, 적외선, 케이블, 레이저 등을 포함한, 다양한 유선 및/또는 무선 단거리 또는 장거리 캐리어들 및 프로토콜들을 활용할 수 있음을 이해할 것이다.
본 발명의 개념의 실시 예들은 기능들(함수들), 절차들, 데이터 구조들, 응용 프로그램들 등을 포함하는 관련된 데이터를 참조하거나 이와 관련하여 설명될 수 있으며, 이는 기계에 의해 액세스될 때 기계가 작업들을 수행하거나 추상 데이터 유형들 또는 하위-레벨의 하드웨어 컨텍스트(context)들을 정의하게 한다. 관련된 데이터는, 예를 들어, 휘발성 및/또는 비휘발성 메모리, 예를 들어 RAM, ROM 등, 또는 하드 드라이브들, 플로피 디스크들, 광학 스토리지, 테이프들, 플래시 메모리, 메모리 스틱들, 디지털 비디오 디스크들, 생물학적 스토리지 등을 포함하는 다른 저장 장치들 및 그들의 관련된 저장 매체에 저장될 수 있다. 관련된 데이터는 패킷들, 직렬 데이터, 병렬 데이터, 전파된 신호들 등의 형태로, 물리적 및/또는 논리적 네트워크를 포함하는, 전송 환경들을 통해 전달될 수 있고, 그리고 압축 또는 암호화된 형식으로 사용될 수 있다. 관련된 데이터는 분산 환경에서 사용될 수 있고, 그리고 기계 액세스에 대해 국부적으로 및/또는 원격으로 저장될 수 있다.
본 발명의 실시 예들은 하나 이상의 프로세서들에 의해 실행 가능한 명령어들을 포함하는 유형의, 비-일시적 기계-판독 가능 매체(non-transitory machine-readable medium)를 포함할 수 있고, 명령어들은 본 명세서에 설명된 본 발명의 요소들을 수행하기 위한 명령어들을 포함한다.
상술한 방법의 다양한 동작들은 다양한 하드웨어 및/또는 소프트웨어 구성 요소(들), 회로들 및/또는 모듈(들)과 같은, 동작들을 수행할 수 있는 임의의 적절한 수단들에 의해 수행될 수 있다. 소프트웨어는 논리적 기능들을 구현하기 위한 실행 가능한 명령들의 순서 목록(ordered listing)을 포함할 수 있고, 그리고 단일 또는 다중-코어 프로세서 또는 프로세서-포함 시스템과 같은, 명령 실행 시스템, 장치, 또는 디바이스에 의해 또는 이와 관련하여 사용하기 위해 임의의 "프로세서-판독 가능 매체(processor-readable medium)"에 구현될 수 있다.
본 명세서에 개시된 실시 예들과 관련하여 설명된 방법 또는 알고리즘 및 기능들(함수들)의 블록들 또는 단계들은 하드웨어, 프로세서에 의해 실행되는 소프트웨어 모듈, 또는 이 둘의 조합으로 직접 구현될 수 있다. 소프트웨어로 구현되는 경우, 기능들은 유형의, 비-일시적 컴퓨터-판독 가능 매체에 하나 이상의 명령들 또는 코드로 저장되거나 또는 전송될 수 있다. 소프트웨어 모듈은 RAM(Random Access Memory), 플래시 메모리, ROM(Read Only Memory), EPROM(Electrically Programmable ROM), EEPROM(Electrically Erasable Programmable ROM), 레지스터들, 하드 디스크, 이동식 디스크, CD ROM, 또는 당 업계에 알려진 임의의 다른 형태의 저장 매체에 상주할 수 있다.
예시된 실시 예들을 참조하여 본 발명의 원리들을 설명하고 예시하였지만, 예시된 실시 예들은 그러한 원리들에서 벗어나지 않고 배열 및 세부 사항이 수정될 수 있고, 그리고 임의의 원하는 방식으로 결합될 수 있음을 인식할 것이다. 그리고, 전술한 논의는 특정 실시 예들에 초점을 맞추었지만, 다른 구성들이 고려된다. 특히, 본 명세서에서는 "본 발명의 실시 예에 따른" 등의 표현들이 사용되었으나, 이러한 문구들은 일반적으로 실시 예의 가능성들을 참조하기 위한 것이고, 그리고 본 발명의 개념을 특정 실시 예의 구성들로 한정하려는 의도는 아니다. 본 명세서에서 사용된 바와 같이, 이들 용어들은 다른 실시 예들로 결합될 수 있는 동일하거나 상이한 실시 예들을 지칭할 수 있다.
전술한 예시적인 실시 예들은 본 발명의 개념을 제한하는 것으로 해석되어서는 안된다. 몇몇 실시 예들이 설명되었지만, 당업자는 본 개시의 신규한 교시들 및 이점들로부터 실질적으로 벗어나지 않고 많은 수정들이 이러한 실시 예들에 가능하다는 것을 쉽게 이해할 것이다. 따라서, 이러한 모든 수정들은 청구 범위에 정의된 본 발명의 개념의 범위 내에 포함되도록 의도된다.
본 발명의 실시 예들은 제한없이 다음의 설명들로 확장될 수 있다:
설명 1. 본 발명의 실시 예는:
데이터에 대한 스토리지, 데이터는 객체 암호화 키를 사용하여 암호화된 데이터 값을 포함하고, 데이터 값은 객체 키와 관련되고, 객체 키 및 데이터 값은 객체를 형성하고;
객체 키를 해시 값에 매핑하는 사용자 보안 객체 맵;
해시 값을 객체 암호화 키에 매핑하는 보안 키 공유 테이블; 및
해시 값을 객체에 대한 스토리지의 주소에 매핑하는 중복 제거 맵을 포함하는 KV-SSD(Key-Value Solid State Drive)를 포함한다.
설명 2. 본 발명의 실시 예는 설명 1에 따른 KV-SSD를 포함하고, 여기서 사용자 보안 객체 맵은 사용자 키를 사용하여 암호화된다.
설명 3. 본 발명의 실시 예는 설명 2에 따른 KV-SSD를 포함하고, 여기서 사용자 키는 KV-SSD에 저장되지 않는다.
설명 4. 본 발명의 실시 예는 설명 2에 따른 KV-SSD를 포함하고, 호스트 컴퓨터 시스템은 K-V SSD에 사용자 키를 제공한다.
설명 5. 본 발명의 실시 예는 설명 1에 따른 KV-SSD를 포함하고, 여기서 사용자 보안 객체 맵은 사용자와 연관된다.
설명 6. 본 발명의 실시 예는 설명 5에 따른 KV-SSD를 포함하고, 복수의 사용자 보안 객체 맵들을 더 포함하고, 복수의 사용자 보안 객체 맵들은 사용자 보안 객체 맵을 포함하고, 복수의 사용자 보안 객체 맵들 각각은 복수의 사용자들로부터의 사용자와 연관된다.
설명 7. 본 발명의 실시 예는 설명 6에 따른 KV-SSD를 포함하고, 여기서 사용자 보안 객체 맵들 각각은 복수의 사용자로부터 사용자와 연관된 별도의 사용자 키를 사용하여 암호화된다.
설명 8. 본 발명의 실시 예는 설명 1에 따른 KV-SSD를 포함하고, 여기서 보안 키 공유 테이블은 장치 암호화 키를 사용하여 암호화된다.
설명 9. 본 발명의 실시 예는 설명 8에 따른 KV-SSD를 포함하고, 여기서 중복 제거 맵은 장치 암호화 키를 사용하여 암호화된다.
설명 10. 본 발명의 실시 예는 설명 8에 따른 KV-SSD를 포함하고, 여기서 장치 암호화 키는 KV-SSD에만 알려져 있다.
설명 11. 본 발명의 실시 예는 설명 1에 따른 KV-SSD를 포함하고, 여기서 보안 키 공유 테이블은 객체를 액세스하도록 허용된 사용자들의 공유 리스트에 해시 값을 더 매핑한다.
설명 12. 본 발명의 실시 예는 설명 11에 따른 KV-SSD를 포함하고, 보안 키 공유 테이블을 이용하여 해시 값을 갖는 객체 및 제2 객체의 중복 제거를 수행하는 보안 중복 제거 관리자를 더 포함한다.
설명 13. 본 발명의 실시 예는 설명 11에 따른 KV-SSD를 포함하고, 여기서 보안 키 공유 테이블은 해시 값을 객체에 접근하는 사용자들의 액세스 리스트에 더 매핑한다.
설명 14. 본 발명의 실시 예는 설명 12에 따른 KV-SSD를 포함하고, 여기서 중복 제거 맵은 해시 값을 데이터 값에 대한 참조들의 참조 카운트에 더 매핑한다.
설명 15. 본 발명의 실시 예는:
장치로부터 KV-SSD(Key-Value Solid State Drive)에 객체를 쓰기 위한 쓰기 요청을 수신하는 단계, 객체는 객체 키와 관련된 데이터 값을 포함하고;
데이터 값의 해시 값을 계산하는 단계;
객체 키를 해시 값에 매핑하도록 사용자 보안 객체 맵을 업데이트하는 단계; 및
데이터 값이 KV-SSD 상에 저장된 주소에 해시 값을 매핑하도록 중복 제거 맵을 업데이트하는 단계를 포함하는 방법을 포함한다.
설명 16. 본 발명의 실시 예는 설명 15에 따른 방법을 포함하고, KV-SSD에서 장치로 응답을 전송하는 단계를 더 포함하고, 응답은 데이터 값이 KV-SSD에 성공적으로 쓰여진 것을 나타낸다.
설명 17. 본 발명의 실시 예는 설명 15에 따른 방법을 포함하고,
장치로부터 사용자 키를 수신하는 단계;
KV-SSD의 스토리지에서 암호화된 사용자 보안 객체 맵을 검색하는 단계; 및
사용자 보안 객체 맵을 생성하기 위해 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계를 더 포함한다.
설명 18. 본 발명의 실시 예는 설명 17에 따른 방법을 포함하고, 여기서:
장치로부터 사용자 키를 수신하는 단계는 장치로부터 KV-SSD에 객체를 쓰기 위한 쓰기 요청을 수신하기 전에 장치로부터 사용자 키를 수신하는 단계를 포함하고; 및
사용자 보안 객체 맵을 생성하기 위해 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계는 장치로부터 KV-SSD에 객체를 쓰기 위한 쓰기 요청을 수신하기 전에 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하여 사용자 보안 객체 맵을 생성하는 단계를 포함한다.
설명 19. 본 발명의 실시 예는 설명 17에 따른 방법을 포함하고, 장치로부터 사용자 식별자(ID)를 수신하는 단계를 더 포함한다.
설명 20. 본 발명의 실시 예는 설명 17에 따른 방법을 포함하고,
장치로부터 사용자가 장치에서 로그 아웃했다는 메시지를 수신하는 단계;
사용자 키를 사용하여 사용자 보안 객체 맵을 암호화하는 단계; 및
암호화된 사용자 보안 객체 맵을 KV-SSD의 스토리지에 저장하는 단계를 더 포함한다.
설명 21. 본 발명의 실시 예는 설명 20에 따른 방법을 포함하고, KV-SSD로부터 사용자 키 및 사용자 보안 객체 맵을 제거하는 단계를 더 포함한다.
설명 22. 본 발명의 실시 예는 설명 15에 따른 방법을 포함하고, 여기서 객체 키를 해시 값에 매핑하도록 사용자 보안 객체 맵을 업데이트하는 단계는 사용자 보안 객체 맵에 새로운 엔트리를 추가하여 해시 값을 객체 키에 매핑하는 단계를 포함한다.
설명 23. 본 발명의 실시 예는 설명 15에 따른 방법을 포함하고, 여기서 객체 키를 해시 값에 매핑하도록 사용자 보안 객체 맵을 업데이트하는 단계는 객체 키를 포함하는 사용자 보안 객체 맵에 존재하는 엔트리의 오래된 해시 값을 해시 값으로 대체하는 단계를 포함한다.
설명 24. 본 발명의 실시 예는 설명 15에 따른 방법을 포함하고, 여기서 주소에 해시 값을 매핑하도록 중복 제거 맵을 업데이트하는 단계는:
KV-SSD의 스토리지에서 암호화된 중복 제거 맵을 검색하는 단계;
장치 암호화 키를 사용하여 암호화된 중복 제거 맵을 복호화하여 중복 제거 맵을 생성하는 단계;
암호화된 중복 제거 맵을 생성하기 위해 중복 제거 맵을 업데이트하여 해시 값 및 주소를 저장한 후 장치 암호화 키를 사용하여 중복 제거 맵을 암호화하는 단계; 및
암호화된 중복 제거 맵을 스토리지에 저장하는 단계를 포함한다.
설명 25. 본 발명의 실시 예는 설명 15에 따른 방법을 포함하고, 여기서 방법은:
암호화된 데이터 값을 생성하기 위해 객체 암호화 키를 사용하여 데이터 값을 암호화하는 단계; 및
암호화된 데이터 값을 KV-SSD의 주소에 쓰는 단계를 더 포함하고, 그리고
해시 값을 매핑하도록 중복 제거 맵을 업데이트하는 단계는 중복 제거 맵에 새로운 엔트리를 추가하여 해시 값을 주소에 매핑하는 단계를 포함한다.
설명 26. 본 발명의 실시 예는 설명 25에 따른 방법을 포함하고, 해시 값을 객체 암호화 키에 매핑하도록 보안 키 공유 테이블을 업데이트하는 단계를 더 포함한다.
설명 27. 본 발명의 실시 예는 설명 26에 따른 방법을 포함하고, 여기서 해시 값을 객체 암호화 키에 매핑하도록 보안 키 공유 테이블을 업데이트하는 단계는:
KV-SSD의 스토리지에서 암호화된 보안 키 공유 테이블을 검색하는 단계;
보안 키 공유 테이블을 생성하기 위해 장치 암호화 키를 사용하여 암호화된 보안 키 공유 테이블을 복호화하는 단계;
암호화된 보안 키 공유 테이블을 생성하기 위해 보안 키 공유 테이블을 업데이트한 후 장치 암호화 키를 사용하여 보안 키 공유 테이블을 암호화하는 단계; 및
암호화된 보안 키 공유 테이블을 스토리지에 저장하는 단계를 포함한다.
설명 28. 본 발명의 실시 예는 설명 26에 따른 방법을 포함하고, 여기서 해시 값을 객체 암호화 키에 매핑하도록 보안 키 공유 테이블을 업데이트하는 단계는 보안 키 공유 테이블에 새로운 엔트리를 추가하여 해시 값을 객체 암호화 키에 매핑하는 단계를 포함한다.
설명 29. 본 발명의 실시 예는 설명 28에 따른 방법을 포함하고, 여기서 보안 키 공유 테이블에 새로운 엔트리를 추가하여 해시 값을 객체 암호화 키에 매핑하는 단계는:
보안 키 공유 테이블의 참조 카운트를 1로 초기화하는 단계; 및
해시 값을 참조 카운트에 매핑하는 단계를 포함한다.
설명 30. 본 발명의 실시 예는 설명 28에 따른 방법을 포함하고, 여기서 보안 키 공유 테이블에 새로운 엔트리를 추가하여 해시 값을 객체 암호화 키에 매핑하는 단계는 보안 키 공유 테이블을 업데이트하여 해시 값을 쓰기 요청과 관련된 사용자 ID를 포함하는 공유 리스트에 매핑하는 단계를 포함한다.
설명 31. 본 발명의 실시 예는 설명 30에 따른 방법을 포함하고, 여기서 보안 키 공유 테이블에 새로운 엔트리를 추가하여 해시 값을 객체 암호화 키에 매핑하는 단계는 보안 키 공유 테이블을 업데이트하여 해시 값을 쓰기 요청과 관련된 사용자 ID를 포함하는 액세스 리스트에 매핑하는 단계를 더 포함한다.
설명 32. 본 발명의 실시 예는 설명 26에 따른 방법을 포함하고, 여기서 해시 값을 객체 암호화 키에 매핑하도록 보안 키 공유 테이블을 업데이트하는 단계는:
해시 값을 보안 키 공유 테이블의 공유 리스트에 매핑하는 단계;
공유 리스트가 쓰기 요청과 연관된 사용자 ID를 포함하는지 확인하는 단계; 및
쓰기 요청과 관련된 사용자 ID를 포함하는 공유 리스트에 적어도 부분적으로 기초하여:
해시 값을 보안 키 공유 테이블의 참조 카운트에 매핑하는 단계; 및
참조 카운트를 증가시키는 단계를 포함한다.
설명 33. 본 발명의 실시 예는 설명 32에 따른 방법을 포함하고, 여기서 해시 값을 객체 암호화 키에 매핑하도록 보안 키 공유 테이블을 업데이트하는 단계는:
해시 값을 보안 키 공유 테이블의 액세스 리스트에 매핑하는 단계; 및
액세스 리스트에 사용자 ID를 추가하는 단계를 더 포함한다.
설명 34. 본 발명의 실시 예는 설명 32에 따른 방법을 포함하고, 쓰기 요청과 관련된 사용자 ID를 포함하지 않는 공유 리스트에 적어도 부분적으로 기초하여, 보안 키 공유 테이블에 해시 값에서 객체 암호화 키 및 사용자 ID를 포함하는 제2 공유 리스트로의 제2 매핑을 추가하는 단계를 더 포함한다.
설명 35: 본 발명의 실시 예는:
장치로부터 KV-SSD(Key-Value Solid State Drive)에 객체를 읽기 위한 읽기 요청을 수신하는 단계, 객체는 객체 키에 의해 식별되고;
객체 키를 사용자 보안 객체 맵의 해시 값에 매핑하는 단계;
해시 값을 중복 제거 맵의 주소에 매핑하는 단계; 및
KV-SSD의 주소로부터 객체에 대한 데이터 값을 읽는 단계를 포함하는 방법을 포함한다.
설명 36. 본 발명의 실시 예는 설명 35에 따른 방법을 포함하고, KV-SSD에서 장치로 응답을 전송하는 단계를 더 포함하고, 응답은 KV-SSD의 주소로부터 읽혀진 데이터 값을 포함한다.
설명 37. 본 발명의 실시 예는 설명 35에 따른 방법을 포함하고, 사용자 보안 객체 맵의 해시 값에 매핑되지 않은 객체 키에 적어도 부분적으로 기초하여 오류를 반환하는 단계를 더 포함한다.
설명 38. 본 발명의 실시 예는 설명 35에 따른 방법을 포함하고,
장치로부터 사용자 키를 수신하는 단계;
KV-SSD의 스토리지에서 암호화된 사용자 보안 객체 맵을 검색하는 단계; 및
사용자 보안 객체 맵을 생성하기 위해 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계를 더 포함한다.
설명 39. 본 발명의 실시 예는 설명 38에 따른 방법을 포함하고, 여기서:
장치로부터 사용자 키를 수신하는 단계는 장치로부터 KV-SSD의 객체를 읽기 위한 읽기 요청을 수신하기 전에 장치로부터 사용자 키를 수신하는 단계를 포함하고; 및
사용자 보안 객체 맵을 생성하기 위해 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계는 사용자 보안 객체 맵을 생성하기 위해 장치로부터 KV-SSD에 객체를 읽기 위한 읽기 요청을 수신하기 전에 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계를 포함한다.
설명 40. 본 발명의 실시 예는 설명 38에 따른 방법을 포함하고, 장치로부터 사용자 식별자(ID)를 수신하는 단계를 더 포함한다.
설명 41. 본 발명의 실시 예는 설명 35에 따른 방법을 포함하고, 여기서 객체 키를 사용자 보안 객체 맵의 해시 값에 매핑하는 단계는:
객체 키를 포함하는 사용자 보안 객체 맵에서 엔트리를 식별하는 단계; 및
객체 키를 포함하는 사용자 보안 객체 맵의 엔트리에서 해시 값을 식별하는 단계를 포함한다.
설명 42. 본 발명의 실시 예는 설명 35에 따른 방법을 포함하고, 여기서 해시 값을 중복 제거 맵의 주소에 매핑하는 단계는:
해시 값을 포함하는 중복 제거 맵에서 엔트리를 식별하는 단계; 및
해시 값을 포함하는 중복 제거 맵의 엔트리에서 주소를 식별하는 단계를 포함한다.
설명 43. 본 발명의 실시 예는 설명 42에 따른 방법을 포함하고, 여기서 해시 값을 중복 제거 맵의 주소에 매핑하는 단계는:
KV-SSD의 스토리지에서 암호화된 중복 제거 맵을 검색하는 단계; 및
중복 제거 맵을 생성하기 위해 장치 암호화 키를 사용하여 암호화된 중복 제거 맵을 복호화하는 단계를 더 포함한다.
설명 44. 본 발명의 실시 예는 설명 35에 따른 방법을 포함하고, 여기서 KV-SSD의 주소로부터 객체에 대한 데이터 값을 읽는 단계는:
KV-SSD의 주소로부터 객체에 대한 암호화된 데이터 값을 읽는 단계; 및
객체 암호화 키를 사용하여 암호화된 데이터 값을 복호화하는 단계를 포함한다.
설명 45. 본 발명의 실시 예는 설명 44에 따른 방법을 포함하고, 여기서 객체 암호화 키를 사용하여 암호화된 데이터 값을 복호화하는 단계는 해시 값을 보안 키 공유 테이블의 객체 암호화 키에 매핑하는 단계를 포함한다.
설명 46. 본 발명의 실시 예는 설명 45에 따른 방법을 포함하고, 여기서 해시 값을 보안 키 공유 테이블의 객체 암호화 키에 매핑하는 단계는:
해시 값을 포함하는 보안 키 공유 테이블에서 엔트리를 식별하는 단계; 및
해시 값을 포함하는 보안 키 공유 테이블의 엔트리에서 객체 암호화 키를 식별하는 단계를 포함한다.
설명 47. 본 발명의 실시 예는 설명 45에 따른 방법을 포함하고, 여기서 해시 값을 보안 키 공유 테이블의 객체 암호화 키에 매핑하는 단계는:
해시 값을 보안 키 공유 테이블의 공유 리스트에 매핑하는 단계; 및
공유 리스트가 읽기 요청과 관련된 사용자 ID를 포함하는지를 확인하는 단계를 포함한다.
설명 48. 본 발명의 실시 예는 설명 47에 따른 방법을 포함하고, 여기서 해시 값을 보안 키 공유 테이블의 공유 리스트에 매핑하는 단계는:
해시 값을 포함하는 보안 키 공유 테이블에서 엔트리를 식별하는 단계; 및
해시 값을 포함하는 보안 키 공유 테이블의 항목에서 공유 리스트를 식별하는 단계를 포함한다.
설명 49. 본 발명의 실시 예는 설명 47에 따른 방법을 포함하고, 읽기 요청과 관련된 사용자 ID를 포함하지 않는 공유 리스트에 적어도 부분적으로 기초하여 오류를 반환하는 단계를 더 포함한다.
설명 50. 본 발명의 실시 예는 설명 47에 따른 방법을 포함하고, 여기서 해시 값을 보안 키 공유 테이블의 객체 암호화 키에 매핑하는 단계는:
해시 값을 보안 키 공유 테이블의 액세스 리스트에 매핑하는 단계; 및
액세스 리스트가 읽기 요청과 관련된 사용자 ID를 포함하는지 확인하는 단계를 더 포함한다.
설명 51. 본 발명의 실시 예는 설명 50에 따른 방법을 포함하고, 여기서 해시 값을 보안 키 공유 테이블의 액세스 리스트에 매핑하는 단계는:
해시 값을 포함하는 보안 키 공유 테이블에서 엔트리를 식별하는 단계; 및
해시 값을 포함하는 보안 키 공유 테이블의 엔트리에서 액세스 리스트를 식별하는 단계를 포함한다.
설명 52. 본 발명의 실시 예는 설명 50에 따른 방법을 포함하고, 읽기 요청과 관련된 사용자 ID를 포함하지 않는 액세스 리스트에 적어도 부분적으로 기초하여 오류를 반환하는 단계를 더 포함한다.
설명 53. 본 발명의 실시 예는 설명 45에 따른 방법을 포함하고, 여기서 해시 값을 보안 키 공유 테이블의 객체 암호화 키에 매핑하는 단계는:
KV-SSD의 스토리지에서 암호화된 보안 키 공유 테이블을 검색하는 단계; 및
보안 키 공유 테이블을 생성하기 위해 장치 암호화 키를 사용하여 암호화된 보안 키 공유 테이블을 복호화하는 단계를 포함한다.
설명 54. 본 발명의 실시 예는:
장치로부터 KV-SSD(Key-Value Solid State Drive)에 객체를 삭제하기 위한 삭제 요청을 수신하는 단계, 객체는 객체 키에 의해 식별되고;
사용자 보안 객체 맵의 해시 값에 객체 키를 매핑하는 단계;
보안 키 공유 테이블의 참조 카운트에 해시 값을 매핑하는 단계; 및
참조 카운트를 감소시키는 단계를 포함하는 방법을 포함한다.
설명 55. 본 발명의 실시 예는 설명 54에 따른 방법을 포함하고, KV-SSD에서 장치로 응답을 전송하는 단계를 더 포함하고, 응답은 데이터 값이 KV-SSD로부터 성공적으로 삭제되었음을 표시한다.
설명 56. 본 발명의 실시 예는 설명 54에 따른 방법을 포함하고, 사용자 보안 객체 맵의 해시 값에 매핑되지 않은 객체 키에 적어도 부분적으로 기초하여 오류를 반환하는 단계를 더 포함한다.
설명 57. 본 발명의 실시 예는 설명 54에 따른 방법을 포함하고,
장치로부터 사용자 키를 수신하는 단계;
KV-SSD의 스토리지에서 암호화된 사용자 보안 객체 맵을 검색하는 단계; 및
사용자 보안 객체 맵을 생성하기 위해 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계를 더 포함한다.
설명 58. 본 발명의 실시 예는 설명 57에 따른 방법을 포함하고, 여기서:
장치로부터 사용자 키를 수신하는 단계는 장치로부터 KV-SSD의 객체를 삭제하기 위한 삭제 요청을 수신하기 전에 장치로부터 사용자 키를 수신하는 단계를 포함하고; 및
사용자 보안 객체 맵을 생성하기 위해 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계는 사용자 보안 객체 맵을 생성하기 위해 장치로부터 KV-SSD의 객체를 삭제하기 위한 삭제 요청을 수신하기 전에 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계를 포함한다.
설명 59. 본 발명의 실시 예는 설명 57에 따른 방법을 포함하고, 장치로부터 사용자 식별자(ID)를 수신하는 단계를 더 포함한다.
설명 60. 본 발명의 실시 예는 설명 54에 따른 방법을 포함하고, 여기서 객체 키를 사용자 보안 객체 맵의 해시 값에 매핑하는 단계는:
객체 키를 포함하는 사용자 보안 객체 맵에서 엔트리를 식별하는 단계; 및
객체 키를 포함하는 사용자 보안 객체 맵의 엔트리에서 해시 값을 식별하는 단계를 포함한다.
설명 61. 본 발명의 실시 예는 설명 54에 따른 방법을 포함하고, 여기서 보안 키 공유 테이블의 참조 카운트에 해시 값을 매핑하는 단계는:
해시 값을 포함하는 보안 키 공유 테이블에서 엔트리를 식별하는 단계; 및
해시 값을 포함하는 보안 키 공유 테이블의 엔트리에서 참조 카운트를 식별하는 단계를 포함한다.
설명 62. 본 발명의 실시 예는 설명 61에 따른 방법을 포함하고, 여기서 보안 키 공유 테이블의 참조 카운트에 해시 값을 매핑하는 단계는:
KV-SSD의 스토리지에서 암호화된 보안 키 공유 테이블을 검색하는 단계; 및
보안 키 공유 테이블을 생성하기 위해 장치 암호화 키를 사용하여 암호화된 보안 키 공유 테이블을 복호화하는 단계를 더 포함한다.
설명 63. 본 발명의 실시 예는 설명 54에 따른 방법을 포함하고, 여기서 참조 카운트를 감소시키는 단계는:
해시 값을 보안 키 공유 테이블의 공유 리스트에 매핑하는 단계;
공유 리스트가 삭제 요청과 관련된 사용자 ID를 포함하는지 확인하는 단계; 및
삭제 요청과 관련된 사용자 ID를 포함하는 공유 리스트에 적어도 부분적으로 기초하여 참조 카운트를 감소시키는 단계를 포함한다.
설명 64. 본 발명의 실시 예는 설명 63에 따른 방법을 포함하고, 삭제 요청과 관련된 사용자 ID를 포함하지 않는 공유 리스트에 적어도 부분적으로 기초하여 오류를 반환하는 단계를 더 포함한다.
설명 65. 본 발명의 실시 예는 설명 63에 따른 방법을 포함하고, 여기서 참조 카운트를 감소시키는 단계는:
해시 값을 보안 키 공유 테이블의 액세스 리스트에 매핑하는 단계;
액세스 리스트가 삭제 요청과 관련된 사용자 ID를 포함하는지 확인하는 단계; 및
삭제 요청과 관련된 사용자 ID를 포함하는 액세스 리스트에 적어도 부분적으로 기초하여 참조 카운트를 감소시키는 단계를 더 포함한다.
설명 66. 본 발명의 실시 예는 설명 65에 따른 방법을 포함하고, 삭제 요청과 관련된 사용자 ID를 포함하지 않는 액세스 리스트에 적어도 부분적으로 기초하여 오류를 반환하는 단계를 더 포함한다.
설명 67. 본 발명의 실시 예는 설명 54에 따른 방법을 포함하고, 객체 키에서 사용자 보안 객체 맵의 해시 값으로의 매핑을 제거하는 단계를 더 포함한다.
설명 68. 본 발명의 실시 예는 설명 54에 따른 방법을 포함하고,
중복 제거 맵의 주소에 해시 값을 매핑하는 단계; 및
KV-SSD의 주소에서 데이터 값을 삭제하는 단계를 더 포함한다.
설명 69. 본 발명의 실시 예는 설명 68에 따른 방법을 포함하고, 여기서 KV-SSD의 주소에서 데이터 값을 삭제하는 단계는 참조 카운트가 0인 것에 적어도 부분적으로 기초하여 KV-SSD의 주소에서 데이터 값을 삭제하는 단계를 포함한다.
설명 70. 본 발명의 실시 예는 설명 68에 따른 방법을 포함하고, 여기서 중복 제거 맵의 주소에 해시 값을 매핑하는 단계는:
KV-SSD의 스토리지에서 암호화된 중복 제거 맵을 검색하는 단계; 및
중복 제거 맵을 생성하기 위해 장치 암호화 키를 사용하여 암호화된 중복 제거 맵을 복호화하는 단계를 포함한다.
설명 71. 본 발명의 실시 예는 설명 68에 따른 방법을 포함하고,
해시 값에서 보안 키 공유 테이블의 참조 카운트로의 매핑을 제거하는 단계; 및
해시 값에서 중복 제거 맵의 주소로의 매핑을 제거하는 단계를 더 포함한다.
설명 72. 본 발명의 실시 예는 설명 71에 따른 방법을 포함하고, 여기서 해시 값에서 보안 키 공유 테이블의 참조 카운트로의 매핑을 제거하는 단계는 해시 값에서 보안 키 공유 테이블의 객체 암호화 키로의 매핑을 제거하는 단계를 포함한다.
설명 73. 본 발명의 실시 예는 설명 71에 따른 방법을 포함하고, 여기서 해시 값에서 보안 키 공유 테이블의 참조 카운트로의 매핑을 제거하는 단계는 해시 값에서 보안 키 공유 테이블의 공유 리스트로의 매핑을 제거하는 단계를 포함한다.
설명 74. 본 발명의 실시 예는 설명 73에 따른 방법을 포함하고, 여기서 해시 값에서 보안 키 공유 테이블의 공유 리스트로의 매핑을 제거하는 단계는 해시 값에서 보안 키 공유 테이블의 액세스 리스트로의 매핑을 제거하는 단계를 포함한다.
설명 75: 본 발명의 실시 예는 비일시적 저장 매치를 포함하는 물품(article)을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때:
장치로부터 KV-SSD(Key-Value Solid State Drive)에 객체를 쓰기 위한 쓰기 요청을 수신하는 단계, 객체는 객체 키와 관련된 데이터 값을 포함하고;
데이터 값의 해시 값을 계산하는 단계;
객체 키를 해시 값에 매핑하도록 사용자 보안 객체 맵을 업데이트하는 단계; 및
데이터 값이 KV-SSD 상에 저장된 주소에 해시 값을 매핑하도록 중복 제거 맵을 업데이트하는 단계를 초래하는 명령들을 저장한다.
설명 76. 본 발명의 실시 예는 설명 75에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, KV-SSD에서 장치로 응답을 전송하는 단계를 초래하는 명령들을 더 저장하고, 응답은 데이터 값이 KV-SSD에 성공적으로 쓰여진 것을 나타낸다.
설명 77. 본 발명의 실시 예는 설명 75에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때:
장치로부터 사용자 키를 수신하는 단계;
KV-SSD의 스토리지에서 암호화된 사용자 보안 객체 맵을 검색하는 단계; 및
사용자 보안 객체 맵을 생성하기 위해 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계를 초래하는 명령어들을 더 저장한다.
설명 78. 본 발명의 실시 예는 설명 77에 따른 물품을 포함하고, 여기서:
장치로부터 사용자 키를 수신하는 단계는 장치로부터 KV-SSD에 객체를 쓰기 위한 쓰기 요청을 수신하기 전에 장치로부터 사용자 키를 수신하는 단계를 포함하고; 및
사용자 보안 객체 맵을 생성하기 위해 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계는 장치로부터 KV-SSD에 객체를 쓰기 위한 쓰기 요청을 수신하기 전에 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하여 사용자 보안 객체 맵을 생성하는 단계를 포함한다.
설명 79. 본 발명의 실시 예는 설명 77에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, 장치로부터 사용자 식별자(ID)를 수신하는 단계 초래하는 명령어들을 더 저장한다.
설명 80. 본 발명의 실시 예는 설명 77에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때:
장치로부터 사용자가 장치에서 로그 아웃했다는 메시지를 수신하는 단계;
사용자 키를 사용하여 사용자 보안 객체 맵을 암호화하는 단계; 및
암호화된 사용자 보안 객체 맵을 KV-SSD의 스토리지에 저장하는 단계를 초래하는 명령어들을 더 저장한다.
설명 81. 본 발명의 실시 예는 설명 80에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, KV-SSD로부터 사용자 키 및 사용자 보안 객체 맵을 제거하는 단계를 초래하는 명령어들을 더 저장한다.
설명 82. 본 발명의 실시 예는 설명 75에 따른 물품을 포함하고, 여기서 객체 키를 해시 값에 매핑하도록 사용자 보안 객체 맵을 업데이트하는 단계는 사용자 보안 객체 맵에 새로운 엔트리를 추가하여 해시 값을 객체 키에 매핑하는 단계를 포함한다.
설명 83. 본 발명의 실시 예는 설명 75에 따른 물품을 포함하고, 여기서 객체 키를 해시 값에 매핑하도록 사용자 보안 객체 맵을 업데이트하는 단계는 객체 키를 포함하는 사용자 보안 객체 맵에 존재하는 엔트리의 오래된 해시 값을 해시 값으로 대체하는 단계를 포함한다.
설명 84. 본 발명의 실시 예는 설명 75에 따른 물품을 포함하고, 여기서 주소에 해시 값을 매핑하도록 중복 제거 맵을 업데이트하는 단계는:
KV-SSD의 스토리지에서 암호화된 중복 제거 맵을 검색하는 단계;
장치 암호화 키를 사용하여 암호화된 중복 제거 맵을 복호화하여 중복 제거 맵을 생성하는 단계;
암호화된 중복 제거 맵을 생성하기 위해 중복 제거 맵을 업데이트하여 해시 값 및 주소를 저장한 후 장치 암호화 키를 사용하여 중복 제거 맵을 암호화하는 단계; 및
암호화된 중복 제거 맵을 스토리지에 저장하는 단계를 포함한다.
설명 85. 본 발명의 실시 예는 설명 75에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때:
암호화된 데이터 값을 생성하기 위해 객체 암호화 키를 사용하여 데이터 값을 암호화하는 단계; 및
암호화된 데이터 값을 KV-SSD의 주소에 쓰는 단계를 초래하는 명령어들을 더 저장하고, 그리고
해시 값을 매핑하도록 중복 제거 맵을 업데이트하는 단계는 중복 제거 맵에 새로운 엔트리를 추가하여 해시 값을 주소에 매핑하는 단계를 포함한다.
설명 86. 본 발명의 실시 예는 설명 85에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, 해시 값을 객체 암호화 키에 매핑하도록 보안 키 공유 테이블을 업데이트하는 단계를 초래하는 명령어들을 더 저장한다.
설명 87. 본 발명의 실시 예는 설명 86에 따른 물품을 포함하고, 여기서 해시 값을 객체 암호화 키에 매핑하도록 보안 키 공유 테이블을 업데이트하는 단계는:
KV-SSD의 스토리지에서 암호화된 보안 키 공유 테이블을 검색하는 단계;
보안 키 공유 테이블을 생성하기 위해 장치 암호화 키를 사용하여 암호화된 보안 키 공유 테이블을 복호화하는 단계;
암호화된 보안 키 공유 테이블을 생성하기 위해 보안 키 공유 테이블을 업데이트한 후 장치 암호화 키를 사용하여 보안 키 공유 테이블을 암호화하는 단계; 및
암호화된 보안 키 공유 테이블을 스토리지에 저장하는 단계를 포함한다.
설명 88. 본 발명의 실시 예는 설명 86에 따른 물품을 포함하고, 여기서 해시 값을 객체 암호화 키에 매핑하도록 보안 키 공유 테이블을 업데이트하는 단계는 보안 키 공유 테이블에 새로운 엔트리를 추가하여 해시 값을 객체 암호화 키에 매핑하는 단계를 포함한다.
설명 89. 본 발명의 실시 예는 설명 88에 따른 물품을 포함하고, 여기서 보안 키 공유 테이블에 새로운 엔트리를 추가하여 해시 값을 객체 암호화 키에 매핑하는 단계는:
보안 키 공유 테이블의 참조 카운트를 1로 초기화하는 단계; 및
해시 값을 참조 카운트에 매핑하는 단계를 포함한다.
설명 90. 본 발명의 실시 예는 설명 88에 따른 물품을 포함하고, 여기서 보안 키 공유 테이블에 새로운 엔트리를 추가하여 해시 값을 객체 암호화 키에 매핑하는 단계는 보안 키 공유 테이블을 업데이트하여 해시 값을 쓰기 요청과 관련된 사용자 ID를 포함하는 공유 리스트에 매핑하는 단계를 포함한다.
설명 91. 본 발명의 실시 예는 설명 90에 따른 물품을 포함하고, 여기서 보안 키 공유 테이블에 새로운 엔트리를 추가하여 해시 값을 객체 암호화 키에 매핑하는 단계는 보안 키 공유 테이블을 업데이트하여 해시 값을 쓰기 요청과 관련된 사용자 ID를 포함하는 액세스 리스트에 매핑하는 단계를 더 포함한다.
설명 92. 본 발명의 실시 예는 설명 86에 따른 물품을 포함하고, 여기서 해시 값을 객체 암호화 키에 매핑하도록 보안 키 공유 테이블을 업데이트하는 단계는:
해시 값을 보안 키 공유 테이블의 공유 리스트에 매핑하는 단계;
공유 리스트가 쓰기 요청과 연관된 사용자 ID를 포함하는지 확인하는 단계; 및
쓰기 요청과 관련된 사용자 ID를 포함하는 공유 리스트에 적어도 부분적으로 기초하여:
해시 값을 보안 키 공유 테이블의 참조 카운트에 매핑하는 단계; 및
참조 카운트를 증가시키는 단계를 포함한다.
설명 93. 본 발명의 실시 예는 설명 92에 따른 물품을 포함하고, 여기서 해시 값을 객체 암호화 키에 매핑하도록 보안 키 공유 테이블을 업데이트하는 단계는:
해시 값을 보안 키 공유 테이블의 액세스 리스트에 매핑하는 단계; 및
액세스 리스트에 사용자 ID를 추가하는 단계를 더 포함한다.
설명 94. 본 발명의 실시 예는 설명 92에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, 쓰기 요청과 관련된 사용자 ID를 포함하지 않는 공유 리스트에 적어도 부분적으로 기초하여, 보안 키 공유 테이블에 해시 값에서 객체 암호화 키 및 사용자 ID를 포함하는 제2 공유 리스트로의 제2 매핑을 추가하는 단계를 초래하는 명령어들을 더 저장한다.
설명 95: 본 발명의 실시 예는 비일시적 저장 매체를 포함하는 물품(article)을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때:
장치로부터 KV-SSD(Key-Value Solid State Drive)에 객체를 읽기 위한 읽기 요청을 수신하는 단계, 객체는 객체 키에 의해 식별되고;
객체 키를 사용자 보안 객체 맵의 해시 값에 매핑하는 단계;
해시 값을 중복 제거 맵의 주소에 매핑하는 단계; 및
KV-SSD의 주소로부터 객체에 대한 데이터 값을 읽는 단계를 초래하는 명령어들을 저장한다.
설명 96. 본 발명의 실시 예는 설명 95에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, KV-SSD에서 장치로 응답을 전송하는 단계를 초래하는 명령어들을 더 저장하고, 응답은 KV-SSD의 주소로부터 읽혀진 데이터 값을 포함한다.
설명 97. 본 발명의 실시 예는 설명 95에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, 사용자 보안 객체 맵의 해시 값에 매핑되지 않은 객체 키에 적어도 부분적으로 기초하여 오류를 반환하는 단계를 초래하는 명령어들을 더 저장한다.
설명 98. 본 발명의 실시 예는 설명 95에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때:
장치로부터 사용자 키를 수신하는 단계;
KV-SSD의 스토리지에서 암호화된 사용자 보안 객체 맵을 검색하는 단계; 및
사용자 보안 객체 맵을 생성하기 위해 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계를 초래하는 명령어들을 더 저장한다.
설명 99. 본 발명의 실시 예는 설명 98에 따른 물품을 포함하고, 여기서:
장치로부터 사용자 키를 수신하는 단계는 장치로부터 KV-SSD의 객체를 읽기 위한 읽기 요청을 수신하기 전에 장치로부터 사용자 키를 수신하는 단계를 포함하고; 및
사용자 보안 객체 맵을 생성하기 위해 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계는 사용자 보안 객체 맵을 생성하기 위해 장치로부터 KV-SSD에 객체를 읽기 위한 읽기 요청을 수신하기 전에 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계를 포함한다.
설명 100. 본 발명의 실시 예는 설명 98에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, 장치로부터 사용자 식별자(ID)를 수신하는 단계를 초래하는 명령어들을 더 저장한다.
설명 101. 본 발명의 실시 예는 설명 95에 따른 물품을 포함하고, 여기서 객체 키를 사용자 보안 객체 맵의 해시 값에 매핑하는 단계는:
객체 키를 포함하는 사용자 보안 객체 맵에서 엔트리를 식별하는 단계; 및
객체 키를 포함하는 사용자 보안 객체 맵의 엔트리에서 해시 값을 식별하는 단계를 포함한다.
설명 102. 본 발명의 실시 예는 설명 95에 따른 물품을 포함하고, 여기서 해시 값을 중복 제거 맵의 주소에 매핑하는 단계는:
해시 값을 포함하는 중복 제거 맵에서 엔트리를 식별하는 단계; 및
해시 값을 포함하는 중복 제거 맵의 엔트리에서 주소를 식별하는 단계를 포함한다.
설명 103. 본 발명의 실시 예는 설명 102에 따른 물품을 포함하고, 여기서 해시 값을 중복 제거 맵의 주소에 매핑하는 단계는:
KV-SSD의 스토리지에서 암호화된 중복 제거 맵을 검색하는 단계; 및
중복 제거 맵을 생성하기 위해 장치 암호화 키를 사용하여 암호화된 중복 제거 맵을 복호화하는 단계를 더 포함한다.
설명 104. 본 발명의 실시 예는 설명 95에 따른 물품을 포함하고, 여기서 KV-SSD의 주소로부터 객체에 대한 데이터 값을 읽는 단계는:
KV-SSD의 주소로부터 객체에 대한 암호화된 데이터 값을 읽는 단계; 및
객체 암호화 키를 사용하여 암호화된 데이터 값을 복호화하는 단계를 포함한다.
설명 105. 본 발명의 실시 예는 설명 104에 따른 물품을 포함하고, 여기서 객체 암호화 키를 사용하여 암호화된 데이터 값을 복호화하는 단계는 해시 값을 보안 키 공유 테이블의 객체 암호화 키에 매핑하는 단계를 포함한다.
설명 106. 본 발명의 실시 예는 설명 105에 따른 물품을 포함하고, 여기서 해시 값을 보안 키 공유 테이블의 객체 암호화 키에 매핑하는 단계는:
해시 값을 포함하는 보안 키 공유 테이블에서 엔트리를 식별하는 단계; 및
해시 값을 포함하는 보안 키 공유 테이블의 엔트리에서 객체 암호화 키를 식별하는 단계를 포함한다.
설명 107. 본 발명의 실시 예는 설명 105에 따른 물품을 포함하고, 여기서 해시 값을 보안 키 공유 테이블의 객체 암호화 키에 매핑하는 단계는:
해시 값을 보안 키 공유 테이블의 공유 리스트에 매핑하는 단계; 및
공유 리스트가 읽기 요청과 관련된 사용자 ID를 포함하는지를 확인하는 단계를 포함한다.
설명 108. 본 발명의 실시 예는 설명 107에 따른 물품을 포함하고, 여기서 해시 값을 보안 키 공유 테이블의 공유 리스트에 매핑하는 단계는:
해시 값을 포함하는 보안 키 공유 테이블에서 엔트리를 식별하는 단계; 및
해시 값을 포함하는 보안 키 공유 테이블의 항목에서 공유 리스트를 식별하는 단계를 포함한다.
설명 109. 본 발명의 실시 예는 설명 107에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, 읽기 요청과 관련된 사용자 ID를 포함하지 않는 공유 리스트에 적어도 부분적으로 기초하여 오류를 반환하는 단계를 초래하는 명령어들을 더 저장한다.
설명 110. 본 발명의 실시 예는 설명 107에 따른 물품을 포함하고, 여기서 해시 값을 보안 키 공유 테이블의 객체 암호화 키에 매핑하는 단계는:
해시 값을 보안 키 공유 테이블의 액세스 리스트에 매핑하는 단계; 및
액세스 리스트가 읽기 요청과 관련된 사용자 ID를 포함하는지 확인하는 단계를 더 포함한다.
설명 111. 본 발명의 실시 예는 설명 110에 따른 물품을 포함하고, 여기서 해시 값을 보안 키 공유 테이블의 액세스 리스트에 매핑하는 단계는:
해시 값을 포함하는 보안 키 공유 테이블에서 엔트리를 식별하는 단계; 및
해시 값을 포함하는 보안 키 공유 테이블의 엔트리에서 액세스 리스트를 식별하는 단계를 포함한다.
설명 112. 본 발명의 실시 예는 설명 110에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, 읽기 요청과 관련된 사용자 ID를 포함하지 않는 액세스 리스트에 적어도 부분적으로 기초하여 오류를 반환하는 단계를 초래하는 명령어들을 더 저장한다.
설명 113. 본 발명의 실시 예는 설명 105에 따른 물품을 포함하고, 여기서 해시 값을 보안 키 공유 테이블의 객체 암호화 키에 매핑하는 단계는:
KV-SSD의 스토리지에서 암호화된 보안 키 공유 테이블을 검색하는 단계; 및
보안 키 공유 테이블을 생성하기 위해 장치 암호화 키를 사용하여 암호화된 보안 키 공유 테이블을 복호화하는 단계를 포함한다.
설명 114. 본 발명의 실시 예는 비일시적 저장 매체를 포함하는 물품(article)을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때:
장치로부터 KV-SSD(Key-Value Solid State Drive)에 객체를 삭제하기 위한 삭제 요청을 수신하는 단계, 객체는 객체 키에 의해 식별되고;
사용자 보안 객체 맵의 해시 값에 객체 키를 매핑하는 단계;
보안 키 공유 테이블의 참조 카운트에 해시 값을 매핑하는 단계; 및
참조 카운트를 감소시키는 단계를 초래하는 명령어들을 저장한다.
설명 115. 본 발명의 실시 예는 설명 114에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, KV-SSD에서 장치로 응답을 전송하는 단계를 초래하는 명령어들을 더 저장하고, 응답은 데이터 값이 KV-SSD로부터 성공적으로 삭제되었음을 표시한다.
설명 116. 본 발명의 실시 예는 설명 114에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, 사용자 보안 객체 맵의 해시 값에 매핑되지 않은 객체 키에 적어도 부분적으로 기초하여 오류를 반환하는 단계를 초래하는 명령어들을 더 저장한다.
설명 117. 본 발명의 실시 예는 설명 114에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때:
장치로부터 사용자 키를 수신하는 단계;
KV-SSD의 스토리지에서 암호화된 사용자 보안 객체 맵을 검색하는 단계; 및
사용자 보안 객체 맵을 생성하기 위해 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계를 초래하는 명령어들을 더 저장한다.
설명 118. 본 발명의 실시 예는 설명 117에 따른 물품을 포함하고, 여기서:
장치로부터 사용자 키를 수신하는 단계는 장치로부터 KV-SSD의 객체를 삭제하기 위한 삭제 요청을 수신하기 전에 장치로부터 사용자 키를 수신하는 단계를 포함하고; 및
사용자 보안 객체 맵을 생성하기 위해 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계는 사용자 보안 객체 맵을 생성하기 위해 장치로부터 KV-SSD의 객체를 삭제하기 위한 삭제 요청을 수신하기 전에 사용자 키를 사용하여 암호화된 사용자 보안 객체 맵을 복호화하는 단계를 포함한다.
설명 119. 본 발명의 실시 예는 설명 117에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, 장치로부터 사용자 식별자(ID)를 수신하는 단계를 초래하는 명령어들을 더 저장한다.
설명 200. 본 발명의 실시 예는 설명 114에 따른 물품을 포함하고, 여기서 객체 키를 사용자 보안 객체 맵의 해시 값에 매핑하는 단계는:
객체 키를 포함하는 사용자 보안 객체 맵에서 엔트리를 식별하는 단계; 및
객체 키를 포함하는 사용자 보안 객체 맵의 엔트리에서 해시 값을 식별하는 단계를 포함한다.
설명 121. 본 발명의 실시 예는 설명 114에 따른 물품을 포함하고, 여기서 보안 키 공유 테이블의 참조 카운트에 해시 값을 매핑하는 단계는:
해시 값을 포함하는 보안 키 공유 테이블에서 엔트리를 식별하는 단계; 및
해시 값을 포함하는 보안 키 공유 테이블의 엔트리에서 참조 카운트를 식별하는 단계를 포함한다.
설명 122. 본 발명의 실시 예는 설명 121에 따른 물품을 포함하고, 여기서 보안 키 공유 테이블의 참조 카운트에 해시 값을 매핑하는 단계는:
KV-SSD의 스토리지에서 암호화된 보안 키 공유 테이블을 검색하는 단계; 및
보안 키 공유 테이블을 생성하기 위해 장치 암호화 키를 사용하여 암호화된 보안 키 공유 테이블을 복호화하는 단계를 더 포함한다.
설명 123. 본 발명의 실시 예는 설명 114에 따른 물품을 포함하고, 여기서 참조 카운트를 감소시키는 단계는:
해시 값을 보안 키 공유 테이블의 공유 리스트에 매핑하는 단계;
공유 리스트가 삭제 요청과 관련된 사용자 ID를 포함하는지 확인하는 단계; 및
삭제 요청과 관련된 사용자 ID를 포함하는 공유 리스트에 적어도 부분적으로 기초하여 참조 카운트를 감소시키는 단계를 포함한다.
설명 124. 본 발명의 실시 예는 설명 123에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, 삭제 요청과 관련된 사용자 ID를 포함하지 않는 공유 리스트에 적어도 부분적으로 기초하여 오류를 반환하는 단계를 초래하는 명령어들을 더 저장한다.
설명 125. 본 발명의 실시 예는 설명 123에 따른 물품을 포함하고, 여기서 참조 카운트를 감소시키는 단계는:
해시 값을 보안 키 공유 테이블의 액세스 리스트에 매핑하는 단계;
액세스 리스트가 삭제 요청과 관련된 사용자 ID를 포함하는지 확인하는 단계; 및
삭제 요청과 관련된 사용자 ID를 포함하는 액세스 리스트에 적어도 부분적으로 기초하여 참조 카운트를 감소시키는 단계를 더 포함한다.
설명 126. 본 발명의 실시 예는 설명 125에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, 삭제 요청과 관련된 사용자 ID를 포함하지 않는 액세스 리스트에 적어도 부분적으로 기초하여 오류를 반환하는 단계를 초래하는 명령어들을 더 저장한다.
설명 127. 본 발명의 실시 예는 설명 114에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때, 객체 키에서 사용자 보안 객체 맵의 해시 값으로의 매핑을 제거하는 단계를 초래하는 명령어들을 더 저장한다.
설명 128. 본 발명의 실시 예는 설명 114에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때:
중복 제거 맵의 주소에 해시 값을 매핑하는 단계; 및
KV-SSD의 주소에서 데이터 값을 삭제하는 단계를 초래하는 명령어들을 더 저장한다.
설명 129. 본 발명의 실시 예는 설명 128에 따른 물품을 포함하고, 여기서 KV-SSD의 주소에서 데이터 값을 삭제하는 단계는 참조 카운트가 0인 것에 적어도 부분적으로 기초하여 KV-SSD의 주소에서 데이터 값을 삭제하는 단계를 포함한다.
설명 130. 본 발명의 실시 예는 설명 128에 따른 물품을 포함하고, 여기서 중복 제거 맵의 주소에 해시 값을 매핑하는 단계는:
KV-SSD의 스토리지에서 암호화된 중복 제거 맵을 검색하는 단계; 및
중복 제거 맵을 생성하기 위해 장치 암호화 키를 사용하여 암호화된 중복 제거 맵을 복호화하는 단계를 포함한다.
설명 131. 본 발명의 실시 예는 설명 128에 따른 물품을 포함하고, 비일시적 저장 매체는 기계에 의해 실행될 때:
해시 값에서 보안 키 공유 테이블의 참조 카운트로의 매핑을 제거하는 단계; 및
해시 값에서 중복 제거 맵의 주소로의 매핑을 제거하는 단계를 초래하는 명령어들을 더 저장한다.
설명 132. 본 발명의 실시 예는 설명 131에 따른 물품을 포함하고, 여기서 해시 값에서 보안 키 공유 테이블의 참조 카운트로의 매핑을 제거하는 단계는 해시 값에서 보안 키 공유 테이블의 객체 암호화 키로의 매핑을 제거하는 단계를 포함한다.
설명 133. 본 발명의 실시 예는 설명 131에 따른 물품을 포함하고, 여기서 해시 값에서 보안 키 공유 테이블의 참조 카운트로의 매핑을 제거하는 단계는 해시 값에서 보안 키 공유 테이블의 공유 리스트로의 매핑을 제거하는 단계를 포함한다.
설명 134. 본 발명의 실시 예는 설명 133에 따른 물품을 포함하고, 여기서 해시 값에서 보안 키 공유 테이블의 공유 리스트로의 매핑을 제거하는 단계는 해시 값에서 보안 키 공유 테이블의 액세스 리스트로의 매핑을 제거하는 단계를 포함한다.
결과적으로, 본 명세서에 설명된 실시 예들에 대한 다양한 순열들(permutations)의 관점에서, 이 상세한 설명 및 첨부 자료는 단지 예시를 위한 것이고, 그리고 본 발명의 범위를 제한하는 것으로 간주되어서는 안된다. 따라서, 본 발명의 개념으로서 청구되는 것은 다음의 청구 범위 및 그 균등물의 범위 및 사상 내에서 도출될 수 있는 모든 수정들이다.
325: 보안 중복 제거 모듈
505: 해시 함수
510: 보안 객체 관리자
515: 보안 중복 제거 장치
520-1: 시용자 보안 객체 맵
525: 보안 중복 제거 관리자
530: 중복 제거 맵
535: 보안 키 공유 테이블

Claims (10)

  1. 객체 암호화 키를 사용하여 암호화된 데이터 값을 포함하는 데이터에 대한 스토리지, 상기 데이터 값은 객체 키와 관련되고, 상기 객체 키 및 상기 데이터 값은 객체를 형성하고;
    상기 객체 키를 해시 값에 매핑하는 사용자 보안 객체 맵;
    상기 해시 값을 상기 객체 암호화 키에 매핑하는 보안 키 공유 테이블; 및
    상기 해시 값을 상기 객체에 대한 상기 스토리지의 주소에 매핑하는 중복 제거 맵을 포함하는 KV-SSD(Key-Value Solid State Drive).
  2. 제1 항에 있어서,
    상기 사용자 보안 객체 맵은 사용자 키를 사용하여 암호화되는 K-V SSD.
  3. 제2 항에 있어서,
    호스트 컴퓨터 시스템은 상기 K-V SSD에 상기 사용자 키를 제공하는 K-V SSD.
  4. 제1 항에 있어서,
    상기 보안 키 공유 테이블은 장치 암호화 키를 사용하여 암호화되는 K-V SSD.
  5. 제1 항에 있어서,
    상기 보안 키 공유 테이블은 상기 객체를 액세스하도록 허용된 사용자들의 공유 리스트에 상기 해시 값을 더 매핑하는 K-V SSD.
  6. 제5 항에 있어서,
    상기 보안 키 공유 테이블을 이용하여 상기 해시 값을 갖는 상기 객체 및 제2 객체의 중복 제거를 수행하는 보안 중복 제거 관리자를 더 포함하는 K-V SSD.
  7. 제6 항에 있어서,
    상기 중복 제거 맵은 상기 해시 값을 상기 데이터 값에 대한 참조들의 참조 카운트에 더 매핑하는 K-V SSD.
  8. 장치로부터 KV-SSD(Key-Value Solid State Drive)에 객체를 쓰기 위한 쓰기 요청을 수신하는 단계, 상기 객체는 객체 키와 관련된 데이터 값을 포함하고;
    상기 데이터 값의 해시 값을 계산하는 단계;
    상기 객체 키를 상기 해시 값에 매핑하도록 사용자 보안 객체 맵을 업데이트하는 단계; 및
    상기 데이터 값이 상기 KV-SSD 상에 저장되는 주소에 상기 해시 값을 매핑하도록 중복 제거 맵을 업데이트하는 단계를 포함하는 방법.
  9. 제8 항에 있어서,
    암호화된 데이터 값을 생성하기 위해 객체 암호화 키를 사용하여 상기 데이터 값을 암호화하는 단계; 및
    상기 암호화된 데이터 값을 상기 KV-SSD의 상기 주소에 쓰는 단계를 더 포함하고, 및
    상기 해시 값을 매핑하도록 상기 중복 제거 맵을 업데이트하는 단계는 상기 중복 제거 맵에 새로운 엔트리를 추가하여 상기 해시 값을 상기 주소에 매핑하는 단계를 포함하는 방법.
  10. 장치로부터 KV-SSD(Key-Value Solid State Drive)에 객체를 읽기 위한 읽기 요청을 수신하는 단계, 상기 객체는 객체 키에 의해 식별되고;
    상기 객체 키를 사용자 보안 객체 맵의 해시 값에 매핑하는 단계;
    상기 해시 값을 중복 제거 맵의 주소에 매핑하는 단계; 및
    상기 KV-SSD의 상기 주소로부터 상기 객체에 대한 데이터 값을 읽는 단계를 포함하는 방법.

KR1020200178474A 2019-12-18 2020-12-18 안전한 중복 제거를 위한 방법, 장치, 및 시스템 KR20210078437A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962950105P 2019-12-18 2019-12-18
US62/950,105 2019-12-18
US16/846,265 2020-04-10
US16/846,265 US11288212B2 (en) 2019-12-18 2020-04-10 System, apparatus, and method for secure deduplication

Publications (1)

Publication Number Publication Date
KR20210078437A true KR20210078437A (ko) 2021-06-28

Family

ID=76438304

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200178474A KR20210078437A (ko) 2019-12-18 2020-12-18 안전한 중복 제거를 위한 방법, 장치, 및 시스템

Country Status (2)

Country Link
US (1) US11288212B2 (ko)
KR (1) KR20210078437A (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11201896B1 (en) * 2019-05-07 2021-12-14 Rapid7, Inc. Vulnerability validation using lightweight offensive payloads
US11455404B2 (en) * 2020-05-28 2022-09-27 Red Hat, Inc. Deduplication in a trusted execution environment
KR20220077208A (ko) * 2020-11-30 2022-06-09 삼성전자주식회사 데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법
US11687492B2 (en) * 2021-06-21 2023-06-27 International Business Machines Corporation Selective data deduplication in a multitenant environment
US20230289300A1 (en) * 2022-03-10 2023-09-14 Samsung Electronics Co., Ltd. System and method for efficiently obtaining information stored in an address space

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005020540A1 (en) * 2003-08-20 2005-03-03 Matsushita Electric Industrial Co., Ltd. Content reproduction system
US20060271542A1 (en) * 2005-05-25 2006-11-30 Harris Steven T Clustered object state using logical actions
US20080256052A1 (en) * 2007-04-16 2008-10-16 International Business Machines Corporation Methods for determining historical efficacy of a document in satisfying a user's search needs
US8117464B1 (en) 2008-04-30 2012-02-14 Netapp, Inc. Sub-volume level security for deduplicated data
US20100332401A1 (en) 2009-06-30 2010-12-30 Anand Prahlad Performing data storage operations with a cloud storage environment, including automatically selecting among multiple cloud storage sites
US9195858B2 (en) * 2009-08-04 2015-11-24 Seagate Technology Llc Encrypted data storage device
US8370297B2 (en) 2010-03-08 2013-02-05 International Business Machines Corporation Approach for optimizing restores of deduplicated data
WO2012174427A2 (en) 2011-06-16 2012-12-20 OneID Inc. Method and system for determining authentication levels in transactions
US8600949B2 (en) 2011-06-21 2013-12-03 Netapp, Inc. Deduplication in an extent-based architecture
WO2014165451A2 (en) 2013-04-01 2014-10-09 Nexenta Systems, Inc. Key/value storage device and method
US10248677B1 (en) 2014-12-30 2019-04-02 EMC IP Holding Company LLC Scaling an SSD index on a deduplicated storage system
US10831922B1 (en) * 2015-10-30 2020-11-10 United Services Automobile Association (Usaa) System and method for access control
US10691340B2 (en) * 2017-06-20 2020-06-23 Samsung Electronics Co., Ltd. Deduplication of objects by fundamental data identification

Also Published As

Publication number Publication date
US11288212B2 (en) 2022-03-29
US20210191880A1 (en) 2021-06-24

Similar Documents

Publication Publication Date Title
US11263020B2 (en) System and method for wiping encrypted data on a device having file-level content protection
CN102945355B (zh) 基于扇区映射的快速数据加密策略遵从
KR20210078437A (ko) 안전한 중복 제거를 위한 방법, 장치, 및 시스템
US10615967B2 (en) Rapid data protection for storage devices
US8412934B2 (en) System and method for backing up and restoring files encrypted with file-level content protection
US8433901B2 (en) System and method for wiping encrypted data on a device having file-level content protection
US7549044B2 (en) Block-level storage device with content security
US8589680B2 (en) System and method for synchronizing encrypted data on a device having file-level content protection
CN102855452B (zh) 基于加密组块的快速数据加密策略遵从
KR100678927B1 (ko) 비보안 영역에 보안 영역을 할당하는 방법 및 이를제공하는 휴대용 저장 장치
US8750519B2 (en) Data protection system, data protection method, and memory card
JP2008527532A (ja) 非セキュリティ領域にセキュリティ領域を割り当てる方法及び携帯用保存装置
KR20090067649A (ko) 보안 저장 장치를 갖는 메모리 시스템 및 그것의 보안 영역관리 방법
EP2511848A2 (en) Multiple independent encryption domains
US10733306B2 (en) Write-only limited-read filesystem
US9147087B2 (en) Method of accessing a data storage device
JP2009020871A (ja) 外部記憶装置
US20220123932A1 (en) Data storage device encryption
US11595190B2 (en) Encrypted data storage system
US20220121781A1 (en) Data storage device encryption
CN112784321A (zh) 磁盘资安系统

Legal Events

Date Code Title Description
A201 Request for examination