KR102532395B1 - 메모리 보안용 카운터 무결성 트리 - Google Patents

메모리 보안용 카운터 무결성 트리 Download PDF

Info

Publication number
KR102532395B1
KR102532395B1 KR1020207004945A KR20207004945A KR102532395B1 KR 102532395 B1 KR102532395 B1 KR 102532395B1 KR 1020207004945 A KR1020207004945 A KR 1020207004945A KR 20207004945 A KR20207004945 A KR 20207004945A KR 102532395 B1 KR102532395 B1 KR 102532395B1
Authority
KR
South Korea
Prior art keywords
counter
node
tree
memory
counters
Prior art date
Application number
KR1020207004945A
Other languages
English (en)
Other versions
KR20200031671A (ko
Inventor
프라카시 에스. 람라키아니
로베르토 아반지
웬디 아노트 앨새서
Original Assignee
에이알엠 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US15/668,322 external-priority patent/US10540297B2/en
Priority claimed from US15/892,770 external-priority patent/US10733313B2/en
Application filed by 에이알엠 리미티드 filed Critical 에이알엠 리미티드
Publication of KR20200031671A publication Critical patent/KR20200031671A/ko
Application granted granted Critical
Publication of KR102532395B1 publication Critical patent/KR102532395B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/79Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • 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/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2113Multi-level security, e.g. mandatory access control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2145Inheriting rights or properties, e.g., propagation of permissions or restrictions within a hierarchy

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Human Computer Interaction (AREA)
  • Storage Device Security (AREA)
  • Exchange Systems With Centralized Control (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

메모리 보안을 위한 카운터 무결성 트리는, 적어도 2개의 카운터들 사이에서 공유된 주 카운트 값과 적어도 2개의 카운터들 각각에 대해 별개로 지정된 각각의 부 카운트 값의 조합으로 각각 정의되는 적어도 2개의 카운터들을 지정하는 적어도 한 개의 분할-카운터 노드를 포함한다. 이것은, 트리의 부모 노드 당 설치될 수 있는 자식 노드들의 수를 증가시켜, 특정한 사이즈의 메모리 영역을 커버하는 트리에서 가로질러야 하는 트리 레벨들의 수를 줄인다. 부 카운터 무결성 트리 내부에 노드들을 할당하여 주 카운터 무결성 트리의 대응하는 노드 내에 끼워넣어지지 않는 더 큰 부 카운터들을 수용함으로써, 부 카운터 사이즈가 동적으로 변경될 수 있다.

Description

메모리 보안용 카운터 무결성 트리
본 발명은 데이터 처리 분야에 관한 것이다. 특히, 본 발명은 메모리 보안에 관한 것이다.
일부 데이터 처리 시스템은 잠재적인 공격자에게 노출되지 않아야 하는 비밀의 또는 민감한 정보의 처리를 포함하는 소프트웨어를 실행할 필요가 있다. 그러나, 공격자에 의해 부정하게 조작될 수 없는 메모리에 이와 같은 정보를 기억하는데 충분한 용량을 설치하는 것은 불가능할 수 있으므로, 일부 민감한 정보를 공격에 취약한 메모리에 내보내는 것이 필요한 경우가 있다. 예를 들어, 온칩에 기억된 데이터는 공격자로부터 안전하게 보호되지만, 온칩 메모리 스토리지가 제한되므로, 데이터를 오프칩의 외부 메모리에 기록하는 것이 필요할 수도 있다. 공격자는 외부 메모리에서 데이터를 판독하거나 데이터가 외부 메모리로 전달될 때 가로채거나, 및/또는 이와 같은 외부에 기억된 데이터가 그후 처리 시스템 내부로 다시 되돌려줄 때 올바르지 않은 거동을 발생하기 위한 시도에서 외부 메모리에 기억된 데이터 값들을 부정 조작하는 것이 가능할 수 있다. 잠재적으로 안전하지 않은 메모리에 기억된 데이터에 대해 보안을 제공하기 위해, 데이터 값들이 메모리에 기억되기 전에 데이터 값들을 부호화하고, 무결성 검사를 제공하여, 안전하지 않은 메모리에서 데이터가 판독될 때, 데이터가 메모리에 기억된 이후에 데이터가 수정되지 않았는지 검사하는 것이 가능하다. 그러나, 이와 같은 메모리 보안 동작은, 데이터가 메모리에 기록되거나 메모리에서 판독될 때마다 추가적인 계산과 메모리 액세스를 god할 필요가 있기 때문에, 성능 비용을 발생한다.
적어도 일부 실시예는,
메모리에 기억된 데이터에 대한 액세스를 제어하는 메모리 액세스회로와,
메모리의 보호 메모리 영역에 기억된 데이터의 무결성을 검증하는 메모리 보안회로를 구비하고,
상기 메모리 보안회로는 복수의 노드들을 포함하는 주 카운터 무결성 트리를 유지하도록 구성되고, 각각의 노드는 상기 보호 메모리 영역의 각각의 데이터 블록들과 관련된 복수의 카운터들을 지정하고, 복수의 노드들은, 카운터들 중에서 적어도 한 개가 상기 주 카운터 무결성 트리의 추가적인 카운터들을 제공하는 자식 노드를 기억하는 데이터 블록과 관련되는 적어도 한 개의 부모 노드와, 카운터들 중에서 적어도 한 개가 상기 주 카운터 무결성 트리 이외의 데이터를 기억하는 데이터 블록과 관련되는 적어도 한 개의 리프 노드(leaf node)를 포함하고,
상기 보호 메모리 영역의 타겟 데이터 블록에 대한 액세스에 응답하여, 상기 메모리 보안회로는, 상기 타겟 데이터 블록과 관련된 기억된 인증 코드를, 상기 타겟 데이터 블록과 상기 타겟 데이터 블록과 관련되는 상기 주 카운터 무결성 트리의 타겟 카운터에 근거하여 산출되는, 산출된 인증 코드와 비교함으로써 상기 타겟 데이터 블록의 무결성을 검증하도록 구성되고,
상기 주 카운터 무결성 트리의 노드들 중에서 적어도 한 개는, 적어도 2개의 카운터들 사이에서 공유되는 주 카운트 값과 적어도 2개의 카운터들 각각에 대해 별개로 지정된 각각의 부 카운트 값의 조합으로서 각각 정의되는 적어도 2개의 카운터들을 지정하는 분할-카운터(split-counter) 노드를 포함하고,
상기 주 카운터 무결성 트리의 특정한 분할-카운터 노드와 관련된 사이즈 증가 트리거 이벤트에 응답하여, 상기 메모리 보안회로는, 상기 특정한 분할-카운터 노드의 부 카운터들의 사이즈를 증가시키고, 상기 특정한 분할-카운터 노드의 부 카운터들의 서브셋을 적어도 한 개의 미러(mirror) 카운터 무결성 트리의 대응하는 분할-카운터 노드에 할당하도록 구성된 장치를 제공한다.
적어도 일부 실시예는, 메모리의 보호 메모리 영역에 기억된 데이터에 대한 액세스를 제어하는 방법으로서,
상기 보호 메모리 영역의 각각의 데이터 블록들과 관련된 복수의 카운터들을 각각 지정하고, 카운터들 중에서 적어도 한 개가 주 카운터 무결성 트리의 추가적인 카운터들을 제공하는 자식 노드를 기억하는 데이터 블록과 관련되는 적어도 한 개의 부모 노드와, 카운터들 중에서 적어도 한 개가 상기 주 카운터 무결성 트리 이외의 데이터를 기억하는 데이터 블록과 관련되는 적어도 한 개의 리프 노드를 포함하는 복수의 노드들을 포함하는 상기 주 카운터 무결성 트리를 유지하는 단계와,
상기 보호 메모리 영역의 타겟 데이터 블록에 대한 액세스에 응답하여, 상기 타겟 데이터 블록과 관련된 기억된 인증 코드를, 상기 타겟 데이터 블록과 상기 타겟 데이터 블록과 관련되는 상기 주 카운터 무결성 트리의 타겟 카운터에 근거하여 산출되는, 산출된 인증 코드와 비교함으로써 상기 타겟 데이터 블록의 무결성을 검증하는 단계를 포함하고,
상기 주 카운터 무결성 트리의 노드들 중에서 적어도 한 개는, 적어도 2개의 카운터들 사이에서 공유되는 주 카운트 값과 적어도 2개의 카운터들 각각에 대해 별개로 지정된 각각의 부 카운트 값의 조합으로서 각각 정의되는 적어도 2개의 카운터들을 지정하는 분할-카운터 노드를 포함하고,
상기 제어방법은,
상기 주 카운터 무결성 트리의 특정한 분할-카운터 노드와 관련된 사이즈 증가 트리거 이벤트에 응답하여, 상기 특정한 분할-카운터 노드의 부 카운터들의 사이즈를 증가시키고, 상기 특정한 분할-카운터 노드의 부 카운터들의 서브셋을 적어도 한 개의 미러 카운터 무결성 트리의 대응하는 분할-카운터 노드에 할당하는 단계를 더 포함하는 제어방법을 제공한다.
적어도 일부 실시예는 데이터 처리장치를 제어하여 전술한 방법을 행하게 하는 컴퓨터 프로그램을 제공한다. 컴퓨터 프로그램은 기억매체에 기억된다. 기억매체는 비일시적인 기억매체이어도 된다.
본 발명의 또 다른 발명내용, 특징 및 이점은, 다음의 첨부도면을 참조하여 주어지는 이하의 실시예의 설명으로부터 명확해질 것이다:
도 1은 메모리의 보호 메모리 영역에 기억된 데이터의 무결성을 검증하는 메모리 보안회로를 갖는 장치의 일례를 개략적으로 나타낸 것이다.
도 2는 비교를 위해 해시 트리를 이용하여 보호 메모리 영역에 기억된 데이터의 무결성을 검사하는 일례를 나타낸 것이다.
도 3은 비교를 위해 트리의 각각의 노드가 데이터의 무결성을 검사하는 모노리식 카운터들을 지정하는 카운터 무결성 트리의 일례를 나타낸 것이다.
도 4는 카운터들 사이에서 공유된 주 카운트 값과 각각의 카운터에 대해 별개로 지정된 각각의 부 카운트 값들의 조합으로서 카운터들이 지정되는 분할-카운터 노드들을 포함하는 카운터 무결성 트리의 일례를 나타낸 것이다.
도 5는 루트 노드를 향해 트리를 올라가면서 카운터 무결성 트리의 노드들의 애리티(arity)가 감소하는 일례를 나타낸 것이다.
도 6은 카운터 무결성 트리의 한 개의 노드가 한 개보다 많은 수의 주 카운트 값을 지정하고, 각각의 주 카운트 값이 이 노드에 의해 지정된 부 카운트 값들의 다른 서비스에 대응하는 일례를 나타낸 것이다.
도 7은 특정한 데이터 블록에 대한 기억된 인증 코드가 이 데이터 블록에서 분리되어 기억되는 일례를 나타낸 것이다.
도 8은 메모리에 대한 판독 액세스를 제어하는 방법을 나타낸 흐름도이다.
도 9는 메모리에 대한 기록 액세스를 행하는 방법을 나타낸 흐름도이다.
도 10 및 도 11은 성기게 채워진 미러 카운터 무결성 트리의 대응하는 노드에 부 카운터들의 서브셋을 위한 공간을 할당함으로써 분할-카운터 노드의 부 카운터들의 사이즈를 증가시키는 일례를 나타낸 것이다.
도 12는 한 개보다 많은 수의 미러 카운터 무결성 트리가 사용되는 일례를 나타낸 것이다.
도 13은 주 및 부 카운터 무결성 트리들의 대응하는 노드들에 대해 기준 어드레스에 대해 동일한 어드레스 오프셋들을 사용하는 것을 나타낸 것이다.
도 14는 변화하는 애리티와 가변의 부 카운터 사이즈를 갖는 트리의 일례를 나타낸 것이다.
도 15는 다양한 구현예의 카운터 무결성 트리에 대한 성능을 비교하는 그래프이다.
도 16은 사용되는 시뮬레이터의 일례를 나타낸 것이다.
장치는, 메모리에 기억된 데이터에 대한 액세스를 제어하는 메모리 액세스회로와, 메모리의 보호 메모리 영역에 기억된 데이터의 무결성을 검증하는 메모리 보안회로를 갖는다. 예를 들어, 무결성 검증은, 공격자에 의해 보호 메모리 영역에 기억된 데이터를 공격자가 부정 조작하는 것을 검출하기 위한 것이다. 예를 들어, 메모리는 메모리 액세스회로를 포함하는 집적회로와 별개의 집적회로 상의 오프칩 메모리일 수도 있다.
무결성 검증은 기억된 데이터와 메모리 보안회로에 의해 유지된 무결성 메타데이터 사이의 비교에 의존한다. 예를 들어, 보호 메모리 영역에 데이터를 기록할 때, 메모리 보안회로는 보호 메모리 영역에 기억된 데이터의 속성들에 근거하여 무결성 메타데이터를 생성하고, 보호 메모리 영역에서 데이터를 판독할 때, 메모리 보안회로는 무결성 메타데이터를 사용하여 데이터가 기록된 이후에 변경되었는지 여부를 검사한다. 그러나, 이와 같은 무결성 메타데이터는 보호 메모리 영역의 전체 어드레스 범위를 보호하기 위한 모든 메타데이터를 제공하기 위해서는 상당한 양의 스토리지 공간을 필요로 할 수 있다. 공격자에게 취약하지 않은 스토리지 유닛에 데이터를 유지할 수 있는 용량이 제한되므로, 실제로는 보호 메모리 영역 그 자체에 무결성 메타데이터의 적어도 일부를 기억하는 것이 필요한 경우가 자주 있다. 이것은 메타데이터가 공격자에게 취약하게 만들기 때문에, 보통 보호 영역에 마찬가지로 기억되는 추가적인 메타데이터를 사용하여, (실제 해당 데이터와 유사하게) 무결성 메타테이터가 판독될 때 이 무결성 메타데이터 그 자체를 무결성 검증을 겪게 할 필요가 있다. 이 때문에, 보호 메모리 영역 내부의 "실제" 데이터의 판독시마다, 실제 해당 데이터 이외에 무결성 메타데이터의 복수의 판독과 무결성 메타데이터가 유효한지 여부의 검사를 위한 이에 대응하는 비교를 기동하므로, 보호 메모리 영역의 사이즈가 증가함에 따라, 전체 시스템 성능에 미치는 무결성 검증의 성능 충격을 제한하는 것이 점점 더 어려워질 수 있다.
이하에서 설명하는 기술에서는, 메모리 보안회로가 다수의 노드들을 포함하는 카운터 무결성 트리를 유지한다. 카운터 무결성 트리의 노드들은, 부모 노드에 의해 지정된 카운터들 중에서 적어도 한 개가 추가적인 데이터 블록들의 추가적인 카운터들을 제공하는 카운터 무결성 트리의 자식 노드를 기억하는 데이터 블록과 관련되는 적어도 한 개의 부모 노드를 포함한다. 또한, 노드들은, 카운터들 중에서 적어도 한 개가 카운터 무결성 트리 이외의 데이터를 기억하는 데이터 블록과 관련되는 적어도 한 개의 리프 노드를 포함한다.
트리 내부의 각각의 카운터는 대응하는 데이터 블록의 진정성(authenticity)을 검사하는 인증 코드를 생성하기 위해 사용된다. 이 때문에, 보호 메모리 영역의 타겟 데이터 블록에 대한 액세스에 응답하여, 메모리 보안회로는, 타겟 데이터 블록과 관련된 기억된 인증 코드를, 타겟 데이터 블록과 이 타겟 데이터 블록과 관련되는 카운터 무결성 트리의 타겟 카운터에 근거하여 발생되는 산출된 인증 코드와 비교함으로써, 타겟 데이터 블록의 무결성을 검증한다. 이때, 타겟 데이터 블록은, "실제" 해당 데이터를 기억하는 데이터 블록이거나, 또는 다른 "실제" 데이터 블록의 무결성을 검사하기 위한 검증처리의 일부로서 액세스되는, 카운터 무결성 트리 그 자체의 노드들 중에서 한 개를 기억하는 데이터 블록일 수도 있다.
무결성 트리의 사용은, 공격자가 (예를 들어, 메모리 그 자체를 판독하거나 메모리와 데이터의 소스 사이의 인터페이스를 감시함으로써) 현재의 데이터 값과 그것의 유효한 인증 코드를 한꺼번에 캡처한 후, 나중에 이 데이터 값이 더 이상 통용되지 않게 된 후, 메모리 내부에 기억된 올바른 값들을 오래된 데이터 블록과 그것의 관련된 인증 코드로 대체하려도 시도함으로써, 장치 내부에서 올바르지 않은 거동을 일으킬 수 있는 재생 공격(replay attack)에 대해 보호하도록 돕는다. 한 개의 노드로부터의 데이터가 다른 노드에 근거하여 산출된 인증 코드에 의해 보호되는 무결성 트리를 제공함으로써, 한 개의 노드에 대한 오래된 쌍의 데이터 및 인증 코드와 부모 노드로부터의 산출된 인증 코드 및 카운터 사이의 불일치로부터 오래된 데이터의 재생을 검출할 수 있다. 무결성 트리를 구현하는 한가지 방법은, 트리가 카운터들로 구축되어 부모 노드가 그것의 자식 노드들 각각에 대한 인증 코드들을 생성하는데 사용되는 카운터들을 제공하는 무결성 트리의 한가지 종류인 카운터 무결성 트리이다. 그러나, 카운터들의 빈번한 오버플로우를 피하기 위해, 카운터들에는 특정한 수의 비트들을 제공할 필요가 있다. 이것은, 트리 노드 당 얼마나 많은 수의 카운터들이 설치될 것인지를 제한하므로, 카운터 무결성 트리가 구현될 수 있는 효율을 제한할 수 있다.
후술하는 기술에서는, 카운터 무결성 트리의 노드들 중에서 적어도 한 개가, 적어도 2개의 카운터들 사이에서 공유되는 주 카운트 값과 적어도 2개의 카운터들 각각에 대해 별개로 지정된 각각의 부 카운트 값의 조합으로서 각각 정의되는 적어도 2개의 카운터들을 지정하는 분할-카운터 노드이다. 이 때문에, 주 카운트 값은 분할-카운터 노드에 의해 커버되는 데이터 블록들 중에서 적어도 2개의 데이터 블록들에 대응하는 2개 이상의 카운터들 각각 사이에서 공유된 공통 부분을 지정하고, 각각의 부 카운트 값들 각각은 카운터마다 다른 부분을 지정한다.
카운터 무결성 트리 내부에서의 이와 같은 분할-카운터 노드들의 사용은 더욱 효율적인 메모리 성능을 가능하게 한다. 모든 필요한 수의 비트들이 전체가 각각의 카운터에 대해 별개로 설치되어야만 했단 경우보다 카운터마다 별개로 지정된 부 카운트 값이 더 작을 때(일부 비트들이 카운터들의 그룹에 대해 한번 설치된 공유된 주 카운터에 의해 커버되므로), 이것은, 특정한 사이즈의 데이터 블록 내에 끼워넣어질 수 있는 부 카운트 값들의 수가 더 크므로, 사실상 카운터 무결성 트리의 한 개의 노드 내에 지정될 수 있는 카운터들을 갖는 데이터 블록들의 수가 증가될 수 있다는 것을 의미한다. 즉, 카운터 무결성 회로 노드들의 애리티가 더 커질 수 있다(애리티는 부모 노드 당 설치되는 자식 노드들의 수를 말한다). 특정한 사이즈의 보호 메모리 영역을 가정할 때, 분할-카운터 노드들의 애리티가 증가할 수 있으면, 데이터 블록의 무결성과 카운터들 자체의 무결성을 검사하기 위한 모든 카운터들을 얻기 위해 가로지를 필요가 있는 카운터 무결성 트리의 레벨들의 수가 감소될 수 있다. 이것은, 카운터 무결성 트리의 횡단중에 더 적은 메모리 트래픽이 발생되므로, 보호 메모리 영역 내부의 "실제" 데이터에 대한 각각의 액세스에 대해 더 적은 수의 판독 동작을 필요로 함으로써 성능 향상이 존재하게 된다는 것을 의미한다.
또한, 일부 구현예는 메모리에서의 데이터의 서브셋을 기억하는 캐시를 가지며, 데이터를 메모리 그 자체에서 판독해야 하는 경우보다 캐시에서의 액세스에 대해 데이터 액세스 대기시간이 더 짧다. 분할-카운트 노드는 더 큰 수의 카운터들이 특정한 사이즈의 데이터 블록에 표시될 수 있도록 하기 때문에, 이것은, 더 많은 수의 카운터들이 특정한 양의 캐시 공간에서 캐시될 수 있도록 하여, 특정한 데이터 액세스의 무결성을 검사하는데 필요한 카운터가 캐시 내부에 존재할 확률을 증가시켜, 데이터가 이미 캐시에 기억되었을 때, 메모리 내부의 보호 메모리 영역에 대한 더 많은 수의 액세스가 생략될 수 있도록 할 수 있다.
실제로, 부 카운터는 특정한 인증 코드에 대해 보통 필요한 것보다 적은 수의 비트들을 사용하여 지정될 수 있으므로, 분할(주-부) 카운터 접근방법도, 트리 내부의 각각의 부모 노드가 다수의 자식 노드들에 대한 카운터들을 지정하는 것이 아니라 다수의 자식 노드들에 대한 인증 코드들을 지정하는 대안적인 "해시 트리" 구현보다 더 효율적인 경향이 있다. 실제로, 충분한 레벨의 보안을 제공하기 위해 보통 필요한 각각의 해시에 대한 비트들의 수가 주어지는 경우 해시 트리에 대해 실제적인 것보다 트리의 분할 카운터 노드들에 대해 트리의 애리티가 더 클 수 있으므로, 인증 코드를 생성하는데 사용되는 비밀 키를 알지 못하는 경우, (무차별 대입법(brute force) 등에 의해) 특정한 데이터 블록과 관련된 인증 코드(해시)를 추론하거나 추측하는 것이 암호적으로 실현불가능하다.
따라서, 전술한 분할-카운터 노드들로 구현된 트리의 노드들 중에서 적어도 일부를 사용하여 카운터 무결성 트리로서 무결성 메타데이터를 구현함으로써, 트리의 생성 및/또는 데이터 무결성의 검증을 위한 트리의 사용 중에 카운터 무결성 트리를 가로지르는 것이 더 효율적이 되어, 시스템 성능을 향상시킬 수 있다.
주 카운터 무결성 트리의 특정한 분할-카운터 노드와 관련된 사이즈 증가 트리거 이벤트에 응답하여, 메모리 보안회로는, 특정한 분할-카운터 노드의 부 카운터들의 사이즈를 증가시키고, 특정한 분할-카운터 노드의 부 카운터들의 서브셋을 적어도 한 개의 미러 카운터 무결성 트리의 대응하는 분할-카운터 노드에 할당한다. 이와 같은 구성은, 더 큰 부 카운터들을 기억하는데 필요한 추가적인 공간이 미러 카운터 무결성 트리의 대응하는 노드 내부에 수용될 수 있으므로, 이 노드의 애리티(이 노드 아래의 자식 노드들의 수)를 감소시키지 않으면서, 주 트리의 특정한 노드 내부의 부 카운터들의 사이즈를 증가시킬 수 있다. 부 카운터 사이즈가 사이즈 증가 트리거 이벤트가 검출되었던 주 카운터 무결성 트리의 선택된 노드들에 대해 증가될 수 있지만, 주 카운터 무결성 트리의 모든 노드들에 대해 증가될 필요는 없다. 따라서, 부 카운터 무결성 트리는 미러 카운터 무결성 트리의 모든 노드에 대해 유효한 데이터를 갖지 않는 성기게 채워진 트리이다. 이 때문에, 이와 같은 접근방법은 가능한한 작은 부 카운터 사이즈를 사용하여 각각의 노드가 개시할 수 있도록 하여, 특정한 데이터 블록의 무결성을 검증시에 가로지를 필요가 있는 트리의 레벨들의 수를 줄임으로써 성능을 향상시킬 수 있지만, 메모리의 빈번하게 액세스된 영역들에 대응하는 노드들에 대해서는, 추가적인 카운터들을 수용하기 위해 미러 트리를 이용하여 카운터 사이즈를 증가시켜, 필요한 부 카운터 오버플로우에 대해 기동된 성능 집약적인 재암호화 또는 인증 코드 재계산 연산의 가능성을 줄인다. 이 때문에, 가변의 부 카운터 사이즈 접근방법은 트리의 특정한 노드에 대해 특정한 고정된 부 카운터 사지를 갖는 트리보다 전체적으로 더 우수한 성능을 제공할 수 있다.
장치는 제2 메모리를 갖고, 메모리 보안회로는, 주 카운터 무결성 트리의 루트 노드를 지정하거나, 주 카운터 무결성 트리의 루트 노드의 무결성을 검증하기 위한 정보를 지정하는(두번째의 경우에는, 루트 노드 그 자체는 보호 메모리 영역에 기억된다) 루트 검증 데이터를 제2 메모리에 기억한다. 제2 메모리는 신뢰 경계선 내부에 존재하므로, 공격에 취약하지 않다. 예를 들어, 제2 메모리는 온칩 메모린 반면에, 보호 메모리 영역은 오프칩 메모리에 위치할 수 있다. 루트 노드는 트리의 다른 모든 노드들의 조상 노드인 노드이다. 이 때문에, 루트 검증 데이터는 보호 메모리 영역 내부에 놓인 카운터 무결성 트리의 모든 부분이 공격에 취약하지 않은 신뢰된 데이터에 근거하여 인증될 수 있게 할 수 있다. 일부 경우에, 제2 메모리에 기억된 루트 노드 그 자체는 전술한 것과 같은 분할-카운터 노드일 수도 있다. 이와 달리, 루트 노드는 모노리식(비분할) 카운터들을 사용하여 구현될 수도 있다. 또한, 루트 노드의 무결성을 검증하기 위해 제2 메모리에 기억된 정보는 루트 노드 그 자체가 아니라, 보호 메모리 영역에 기억된 루트 노드로부터 유도된 인증값과 비교하기 위한 기억된 인증값을 포함하거나, 및/또는 루트 노드로부터 유도된 인증값을 산출하기 위해 사용되는 기억된 카운터를 포함해도 된다. 미러 카운터 무결성 트리가 할당되었고 미러 카운터 무결성 트리의 루트 노드가 채워진 경우, 제2 메모리는, 미러 카운터 무결성 트리의 루트 노드의 무결성을 검증하기 위한 루트 무결성 데이터를 더 기억하거나, 또는 미러 카운터 무결성 트리 그 자체의 루트 노드를 기억할 수도 있다.
따라서, 타겟 데이터 블록이 액세스될 때, 메모리 보안회로는, 1회 이상의 검증 검사를 행하여, 타겟 카운터 및 루트 노드를 포함하는 주 카운터 무결성 트리의 분기 상의 카운터들(그리고, 주 카운터 무결성 트리의 전체 사이즈에 따라, 개재하는 노드들 상의 한 개 이상의 개재하는 카운터들)의 무결성을 검증하고, 이들 검증 검사들 중에서 적어도 한 개는 제2 메모리에 기억된 루트 검증 데이터에 의존한다.
보호 메모리 영역의 타겟 데이터 블록이 갱신될 때, 메모리 보안회로는, 타겟 카운터를 갱신하고, 타겟 데이터 블록에 기록된 갱신된 데이터와 갱신된 타겟 카운터에 근거하여 타겟 데이터 블록과 관련되는 기억된 인증 코드를 재계산한다. 이 때문에, 타겟 데이터 블록이 갱신될 때마다 인증 코드를 산출하기 위해 사용된 타겟 카운터를 갱신함으로써, 인증 코드의 계산시 신선도를 제공하여, 인증 코드를 생성하는데 사용되는 비밀 키들의 추론을 더 어렵게 한다.
카운터의 갱신은, 카운터 값들의 반복을 피하고, 카운터의 모든 가능한 값이 이미 사용되었을 때 검출될 수 있는 갱신들의 시퀀스를 제공하는 모든 방식으로 행해질 수 있다(데이터가 암호화 또는 인증되는 방식에 대한 변경이 없이 동일한 카운터 값을 재사용하는 것은 성공적인 재생 공격의 위험이 있을 수 있다). 비교적 간단한 접근방법은, 타겟 데이터 블록의 대응하는 데이터가 갱신될 때마다 타겟 카운터를 증분시킴으로써, 카운터를 갱신하는 것일 수 있다. 이와 달리, 다른 구현예는 (예를 들어, 공격자가 카운터의 변화 패턴을 결정하는 것을 더 어렵게 하기 위해, 상수를 사용한 XOR 연산을 적용하여, 갱신시마다 타겟 카운터에 기록되는 카운트 값들의 비단조 증가하는 시퀀스를 제공함으로써) 대응하는 데이터의 갱신시마다 카운터를 비단조적으로 갱신하는 것일 수 있다.
카운터가 오버플로우하면(이전에 사용된 카운터 값으로 복귀하면), 오버플로우는, 데이터를 암호화하는데 사용된 암호화 키들을 변경하거나 인증 코드를 생성하는데 사용된 비밀 키 또는 다른 파라미터를 변경하는 것 등의 다른 조치를 기동하여, 암호화/인증 처리의 일부 다른 파라미터가 변경되었을 때, 이전의 카운터 값들을 재사용하는 것을 더 안전하게 만든다.
타겟 데이터 블록과 관련된 타겟 카운터가 모호 메모리 영역의 추가적인 데이터 블록에 기억될 때, 카운터에 대한 갱신은 보호 메모리 영역에 있는 다른 데이터 블록에 대한 추가적인 기록 액세스를 필요로 하므로, 이것은 이 데이터 블록과 관련된 추가적인 카운터가 갱신되는 것을 필요로 하고, 이것은 그 자체가 추가적인 기록 액세스를 기동하며, 이하 등등이다. 이 때문에, 원래의 기록 액세스는, 루트에 도달할 때까지 트리를 위로 가로지르면서, 성공적인 카운터 갱신 및 인증 코드 재계산들의 시퀀스를 시동한다.
카운터 무결성 트리의 모든 노드들이 분할-카운터 접근방식을 사용하는 것은 필수적인 것은 아니다. 예를 들어, 보호 메모리 영역 내에서 보호해야 하는 데이터 블록들의 총 수는 카운터 무결성 트리에서 구현되는 애리티(부모 노드 당 자식 노드들의 수)의 정확한 거듭제곱이 아닐 수도 있으며, 이 경우, 필요한 애리티를 제공하기 위해서는 더 적은 수의 모노리식 카운터들을 기억하는 것이 충분할 수 있으므로, 더 낮은 애리티를 가져 분할-카운터 접근방법을 사용하지 않는 일부 노드가 존재할 수 있다. 이 때문에, 모든 노드가 분할-카운터들을 사용할 필요는 없다.
분할-카운터 노드들로 구현되는 노드들에 대해, 분할 형태로 구현되는 타겟 카운터가 대응하는 타겟 데이터 블록 내의 대응하는 데이터에 대한 기록으로 인해 갱신될 필요가 있을 때, 메모리 보안회로는 타겟 카운터에 대응하여 부 카운트 값을 갱신한다. 또한, 메모리 보안회로는, 타겟 데이터 블록의 갱신된 데이터, 해당 타겟 카운터에 대응하는 해당하는 주 카운트 값과, 해당 타겟 카운터에 대응하는 갱신된 부 카운트 값에 근거하여, 타겟 데이터 블록과 관련되는 기억된 인증 코드를 재계산한다. 부 카운트 값의 갱신이 오버플로우를 기동하지 않는 경우에는, 타겟 데이터 블록과 동일한 주 카운트 값을 공유하는 다른 데이터 블록들과 관련된 다른 인증 코드들을 갱신할 필요가 없다.
그러나, 부 카운트 값의 갱신이 오버플로우(이전에 사용된 부 카운트 값의 재사용)를 발생할 때, 메모리 보안회로는 해당 타겟 카운터에 대한 대응하는 주 카운트 값을 갱신한다. 이들 카운터에 대한 이 주 카운트 값을 공유하는 타겟 데이터 블록 이외의 다수의 데이터 블록들이 존재하므로, 주 카운트 값을 갱신하는 것은, 이전에 기억된 인증 코드들이 주 카운트 값과 이들 데이터 블록의 데이터 및 부 카운터들로부터 산출된 인증 코드와 더 이상 일치하지 않게 된다는 것을 의미한다. 따라서, 메모리 보안회로는, 타겟 데이터 블록 그 자체에 대한 기억된 인증 코드를 재계산하는 것 이외에, 주 카운트 값을 공유하는 카운터들과 관련되는 다른 데이터 블록들 각각과 관련된 기억된 인증 코드들을 재계산한다. 이 때문에, 각각의 부 카운터들 사이에서의 주 카운트 값의 공유가, 타겟 데이터 블록 그 자체 이외의 블록들에 대한 인증 코드들의 추가적인 계산을 필요로 한다는 것을 의미하는 경우가 있다. 그러나, 이와 같은 성능상의 불이익은 좀처럼 발생하지 않는 반면에, 분할-카운터 접근방법을 사용하여 트리 노드들의 애리티를 증가시키는 것에 의한 성능상의 이득은 카운터 트리의 각각의 횡단을 가속화하도록 도움으로써, 평균적으로 분할-카운터 접근방법을 사용할 때 성능이 더 우수하다.
또한, 적어도 한 개의 미러 카운터 무결성 트리의 특정한 노드의 부 카운트 값의 오버플로우에 응답하여(또는 임계값의 초과 등과 같이, 소정의 조건을 만족하는 특정한 노드의 부 카운터들의 오버플로우의 레이트(rate)에 응답하여), 메모리 보안회로는 이 노드의 부 카운터들의 사이즈를 더 증가시키고 부 카운터들의 서브셋을 적어도 한 개의 미러 카운터 무결성 트리의 대응하는 노드에 할당한다. 즉, 부 카운터가 오버플로우하면(또는 너무 자주 오버플로우하면), 이것은, 부 카운터들의 현재의 사이즈가 너무 작아, 부 카운터들의 사이즈를 증가시켜 동일한 블록에 있는 다른 부 카운터들이 자주 할 가능성을 줄이는 것이 유용할 수 있다는 표시일 수 있다. 부 카운터의 오버플로우에 응답하여 부 카운터들의 사이즈를 항상 증가시키는 것은 필수적인 것은 아니며, 어떤 경우에는 특정한 코드에 대해 부 카운터 사이즈 증가시를 기동하기 위해 다수의 조건들을 만족해야 하며, 이들 조건중 한 개는 이 노드의 부 카운터의 오버플로우이다. 부 카운터 오버플로우의 레이트는, 다양하게, 예를 들어, 시간에 대한 레이트(특정한 시간의 오버플로우의 수) 또는 메모리 액세스 횟수에 대한 레이트(특정한 횟수의 메모리 액세스들에 대해 검출된 오버플로우의 수), 또는 메모리에 대한 기록 동작의 횟수에 대한 레이트로서 모니터링될 수도 있다. 부 카운터 사이즈도 설정된 임계값을 초과하는 데이터 재암호화 또는 인증 코드 재계산의 레이트에 응답하여 증가될 수도 있다(마찬가지로, 데이터 재암호화 또는 인증 코드 재계산의 레이트는 시간, 메모리 액세스의 횟수 또는 메모리에 대한 기록 동작의 횟수에 대해 정의될 수도 있다).
분할 카운터 노드는, 부모 노드 및 리프 노드를 포함하는 카운터 무결성 트리의 모든 노드에 설치될 수 있다. 그러나, 부모 노드들 중에서 적어도 한 개가 분할-카운터 노드인 것이 특히 유용할 수 있다. 이것은 트리의 더 신속한 부채 모양으로의 펼쳐짐(fanning)을 가능하게 하여, 특정한 사지의 보호 메모리 영역을 커버하는데 더 적은 레벨들의 트리가 필요하게 된다. 일부 구현예에서, 메모리 보안회로는 카운터 무결성 트리의 다양한 레벨에 적어도 2개의 분할-카운터 노드들을 포함하는 카운터 무결성 트리를 유지한다.
일부 구현예에서, 카운터 무결성 트리의 각각의 노드가 동일한 애리티를 가질 수 있는데, 즉 각각의 노드는 동일한 수의 데이터 블록들 또는 자식 노드들에 대한 카운터들을 지정한다. 그러나, 트리의 적어도 2개의 노드가 서로 다른 수의 자식 노드들에 대해 카운터들을 지정하는 것도 가능하다.
특히, 트리에서 더 높은 곳에 있는(즉, 루트 노드에 더 가까운) 노드들이 루트로부터 더 멀리 떨어지고 트리의 리프들에 더 가까운 노드들보다 낮은 애리티를 갖도록 주 카운터 무결성 트리의 적어도 일부가 구현되는 것이 유용할 수 있다. 이 때문에, 트리의 애리티는 레벨마다 변경가능하고, 트리를 가로질러 루트 노드에 접근함에 따라 줄어든다.
예를 들어, 주 카운터 무결성 트리는, 제1 수의 데이터 블록들에 대한 카운터들을 지정하는 제1 분할-카운터 노드와, 제1 수보다 큰 제2 수의 데이터 블록들에 대한 카운터들을 지정하는 제2 분할-카운터 노드를 포함하고, 제1 분할-카운터 노드는 제2 분할-카운터 노드의 부모 노드이다. 자식들에 대한 부모 노드들의 애리티를 줄임으로써, 자식 노드에 비해 부모 노드에 더 적은 수의 카운터들이 존재하므로, 더 큰 수의 비트들을 갖는 카운터들을 포함시킬 더 많은 공간이 존재한다. 이 때문에, 제1 분할-카운터 노드에 의해 지정된 부 카운트 값들은 제2 분할-카운터 노드에 의해 지정된 부 카운트 값보다 더 큰 비트 수를 갖는다. 이것은, 루트를 향해 트리의 위로 올라갈 때, 트리의 더 높은 레벨에 있는 각각의 노드가 트리에서 더 멀리 아래쪽에 있는 노드들보다 더 넓은 범위의 어드레스들을 커버하기 때문에, 트리의 각 레벨에 대한 기록 트래픽의 양이 지수적으로 증가하는 경향이 있으므로, 매우 유용할 수 있다. 애리티를 더 작게 하고 부 카운트 값들을 더 크게 함으로써, 루트 노드를 향해 트리를 올라갈 때, 이것은 이들 더 높은 레벨에서의 카운터 오버플로우의 가능성을 줄여, 더 높은 레벨에 있는 노드들에 대해 인증 코드를 재계산할 필요가 있는 빈도를 줄인다. 이 때문에, 더 낮은 레벨에 더 높은 애리티를 제공하고 더 높은 레벨에 더 낮은 애리티를 제공하는 것은, 개별적인 판독 동작에 대한 개시시간과 카운터 오버플로우가 발생할 때의 대기시간 모두를 고려한 더 양호한 성능상의 균형을 제공할 수 있다.
마찬가지로, 트리에 조부모, 부모 및 자식 노드들을 각각 포함하는 3개 이상의 레벨이 존재하는 경우, 조부모 노드는 부모 노드에 비해 애리티의 더 큰 축소를 가져, 조부모 노드가 부모 노드보다 )더 작은 수의 자식 노드들을 커버하는) 더 적은 수의 카운터들을 지정하고, 조부모 노드에 대한 부 카운트 값들이 부모 노드의 부 카운트 값들보다 더 큰 비트 수를 갖는다. 이 때문에, 전술한 것과 같이 제1 분할-카운터 노드가 부모 노드에 대응하고 제2 분할-카운터 노드가 자식 노드에 대응하면, 제3 분할-카운터 노드를 포함하는 추가적인 조부모 노드가 제1 (부모) 분할-카운터 노드에 대해 사용된 제1 수보다 작은 제3 수의 데이터 블록들에 대한 카운터들을 지정한다.
일부 구현예에서, 트리의 각각의 노드에 대한 애리티가 2의 정확한 거듭제곱이어도 된다. 아 때문에, 주 카운터 무결성 트리의 각각의 노드는 2의 정확한 거듭제곱, 예를 들어, 8, 16, 32 또는 64인 다수의 데이터 블록들에 대해 카운터들을 지정할 수도 있다.
그러나, 일 구현예에서는, 주 카운터 무결성 트리의 적어도 한 개의 노드가 2의 정확한 거듭제곱 이외, 예를 들어 36 또는 48의 다수의 데이터 블록들에 대한 카운터들을 지정해도 된다. 즉, 적어도 한 개의 분할-카운터 노드의 애리티는 2의 정확한 거듭제곱 이외의 값이어도 된다. 메모리 공간은 보통 어드레스 계산을 간단하게 하기 위해 2의 거듭제곱 단위의 어드레스들에 대응하는 블록들로 구성되므로, 2의 거듭제곱이 아닌 수의 데이터 블록들에 대응하는 트리 노드들을 사용하는 것은 당업자에게 있어서는 매우 직관에 벗어나는 것일 것이다. 그러나, 다음의 가장 큰 2의 거듭제곱에 대응하는 애리티를 갖는 트리 노드를 구현하는 것은 각각의 카운터의 사이즈를 너무 많이 줄여, 실행 시간을 좌우하는 상당한 수의 오버플로우가 존재할 수 있는 반면에, 다음의 가장 작은 2의 거듭제곱을 사용하는 것은 비트들이 과도하게 제공되는(over-provisioned) 카운터들을 발생하여 오버플로우의 가능성을 무시할 수 있지만 카운터들의 비트들 중 다수가 좀처럼 사용되지 않을 수 있기 때문에, 2개의 인접한 2 거듭제곱들 사이에 놓이는 애리티를 제공하는 것은 더 양호한 성능상의 균형을 제공할 수 있다는 것이 인식되었다. 이 때문에, 가끔 카운터 무결성 트리의 특정한 노드에 의해 커버되는 다수의 데이터 블록들에 대해 2의 거듭제곱이 아닌 수를 이용하는 것은 오버플로우의 가능성에 대한 판독/기록 액세스시에 가로지르는 트리 레벨들의 총 수의 균형을 더 양호하게 유지하여, 동작 기간에 걸쳐 평균적으로 성능을 향상시킨다. 트리 노드에 대해 2의 거듭제곱이 아닌 애리티를 사용하는 것은 카운터 무결성 트리의 특정한 노드가 기억되는 어드레스를 결정하기 위한 어드레스 계산을 복잡하게 할 수 있지만, 이와 같은 추가적인 오버헤드보다는, 오버플로우의 가능성에 대해 트리를 가로지르는데 필요한 메모리 액세스 횟수의 균형을 더 양호하게 유지한다는 추가적인 성능상의 이점이 더 클 수 있다.
메모리 보안회로는, 일부 실시예에서는, 타겟 데이터 블록과 보호 메모리 영역의 동일한 캐시 라인으로부터 타겟 데이터 블록에 대한 기억된 인증 코드를 판독한다. 캐시 라인은, 메모리에 의한 한번의 데이터 액세스로서 반환될 수 있는 메모리 어드레스 공간의 단위이다. 동일한 캐시 라인 내부에 타겟 데이터 그 자체와 함께 기억된 인증 코드를 기억함으로써, 타겟 데이터 블록에 대해 계산된 인증 코드와 비교하기 위한 기억된 인증 코드를 판독하기 위해 두 번째 메모리 액세스를 행할 필요가 없어진다.
그러나, 다른 구현예는 타겟 데이터 블록과 별개의 캐시 라인에 기억된 인증 코드를 기억할 수도 있다. 예를 들어, 일부 메모리 칩은 주 기억 영역에 있는 데이터와 관련된 오류 검출/정정 코드들을 기억하는 보조 기억 영역을 제공한다. 이와 같은 메모리 칩은, 주 데이터와 그것의 관련된 오류 검출/정정 코드가 별개의 캐시 라인들에 기억되더라도, 이것들을 메모리 액세스에 응답하여 효율적으로 반환하도록 구성된다. 이 때문에, 일부 구현예에서는, 기억된 인증 코드가 오류 검출/정정 코드들에 사용하도록 설계된 메모리 칩의 보조 기억 영역에 기억될 수도 있다.
액세스되고 있는 타겟 데이터 블록에 대한 기억된 인증 코드와 계산된 인증 코드 사이에 불일치가 검출되면, 메모리 보안회로는 보안 위반 응답을 기동한다. 보안 위반 응답은, 메모리에 대한 성공적인 액세스를 금지하거나 혹시나 모르는 공격에 대한 대응책을 취하기 위한 다수의 동작들 중 어느 것일 수 있다. 예를 들어, 보안 위반 응답은 다음 중에서 어느 것을 포함할 수도 있다: 타겟 데이터 블록에서의 데이터 액세스의 복호화를 허용하기 위한 암호화 키들에 대한 액세스 거부, 타겟 데이터 블록을 액세스하려는 요구의 거부. 타겟 데이터 블록의 이전의 콘텐츠와 연관되지 않은 더미 데이터, 랜덤 데이터 또는 기타 데이터로 타겟 데이터 블록을 오버라이트하여 이 데이터의 액세스를 금지, 공격에 대해 대응책을 취하기 위해 운영체계 등의 소프트웨어 프로세스를 기동하기 위한 예외 발생, 데이터가 손상된 경우 보호 메모리 영역에 있는 모든 데이터(타겟 데이터 블록만이 아니라)의 오버라이트 또는 소거, 및/또는 (예를 들어, 공격을 받은 경우 장치의 올바른 이용을 방지하기 위해 메모리 또는 장치 내부의 퓨즈로 연결된 접속부를 거친 버닝(burning) 등의 물리적인 대응책을 취함으로써) 장치 또는 메모리의 더 이상의 올바른 이용을 방지하기 위해 장치 또는 메모리를 디스에이블시키는 것. 보안 위반이 식별될 때 취해지는 조치의 정확한 상세내용은 구현마다 변경될 수 있다.
메모리 보안회로는, 보호 메모리 영역의 데이터 블록에 기록된 데이터를 암호화하고 보호 메모리 영역의 데이터 블록에서 판독된 데이터를 복호화하는 암호화/복호화 회로를 갖는다. 이 때문에, 보호 메모리 영역으로부터 데이터를 판독할 수도 있는 공격자에게 데이터가 평문으로 노출되지 않는다. 카운터 무결성 트리는, 데이터가 보호 메모리 영역에 있는 동안 데이터의 부정 조작과 재생 공격을 검출하는 조치를 제공함으로써 추가적인 보호를 제공한다. 보호 메모리 영역에 기록되는 카운터 무결성 트리의 모든 노드는 "실제" 데이터 그 자체와 유사하게 암호화 및 복호화를 겪을 수도 있다.
일부 구현예에서, 메모리 보안회로에 의한 제어를 겪는 메모리에 매핑되는 모든 어드레스 공간은 보호 메모리 영역인 것으로 생각할 수 있으므로, 이 메모리에 대한 모든 액세스는 카운터 무결성 트리를 사용하는 암호화, 복호화 및 무결성 검증을 겪을 수 있다. 메모리 액세스 회로는 동일한 보호를 겪지 않는 별개의 메모리 유닛 등의 적어도 한 개의 다른 메모리에 대한 액세스를 더 제어해도 된다. 이와 달리, 동일한 메모리 장치 내에서, 메모리 내부의 서로 다른 어드레스 범위들이 각각 보호 영역과 비보호 메모리 영역에 매핑될 수도 있다. 비보호 메모리 영역에서는, 메모리 액세스 회로가, 메모리 보안회로에 의해 제공된 보호들에 무관하게, 예를 들어, 암호화/보호화를 필요로 하지 않고, 또한 카운터 무결성 트리 및 인증 코드에 근거한 무결성 검증을 필요로 하지 않고, 아 영역에 있는 데이터에 대한 액세스를 제어해도 된다. 이 때문에, 비보호 메모리 영역에 대한 액세스는 카운터 무결성 트리에 무관하게 제어될 수도 있다. 예를 들어, 공격자에 대해 보호될 필요가 없는 민감하지 않은 일부 데이터가 존재할 수도 있다. 비보호된 메모리 영역에 이 데이터를 기록함으로써, 데이터의 진정성을 검증하기 위해 무결성 트리 데이터 및 인증 코드를 판독/기록하기 위해 추가적인 메모리 액세스를 행할 필요가 없기 때문에, 성능이 향상된다.
전술한 기술은 메모리 보안회로의 기능을 하드웨어로 제공하는 맞춤형 회로를 갖는 물리 장치에서 구현될 수 있다. 이 때문에, 처리장치 상에서 실행되는 소프트웨어는 암호화 또는 복호화 또는 무결성 검증 동작이 행해지고 있는지 알 필요가 없는데, 이것은 이와 같은 동작이 하드웨어로 설치된 메모리 보안회로에 의해 자동으로 행해질 수 있기 때문이다. 따라서, 소프트웨어가 데이터가 보호 메모리 영역에 매핑된 어드레스에 기록되도록 지시하면, 메모리 보안회로는 이것을 메모리에 기록하기 전에 이 데이터를 암호화하고, 공격자에 의해 메모리가 손상되지 않은 카운터 무결성 트리에 근거한 대응하는 카운터 무결성 트리 노드들의 생성 및/또는 검증을 제어할 수도 있다. 마찬가지로, 소프트웨어에 의한 보호 메모리 영역에 대한 판독시에, 메모리 보안 하드웨어는, 판독된 데이터의 복호화와, 판독된 데이터가 여전히 유효한지 검증하기 위한 카운터 무결성 트리 노드들의 검사를 제어할 수도 있다.
그러나, 다른 실시예에서는, 암호화/복호화, 기억된 인증 코드 및 카운터 무결성 트리의 생성과, 기억된 인증 코드 및 카운터 무결성 트리에 근거한 무결성 검증 동작은, 그 자체가 이와 같은 메모리 보안 동작을 자동으로 행하는 하드웨어를 갖지 않는, 장치 내의 범용 처리회로 상에서 실행되는 소프트웨어에 의해 행해질 수도 있다. 예를 들어, 소프트웨어는, 그것의 제어하에서 밑에서 실행되는 다른 어플리케이션을 지원하는 운영체계나 하이퍼바이저 등의 플랫폼 레벨의 코드이어도 된다. 예를 들어, 가상 모신 또는 시뮬레이터 프로그램은, 하드웨어가 실제로 메모리 보안회로를 갖는 것처럼 어플리케이션 코드를 실행하지만, 보호 메모리 영역에 매핑된 어드레스들에 대한 메모리 액세스를 검출하고, 이와 같은 액세스에 대해서는, 데이터가 실제로 보호 메모리 영역에 기록되기 전에, 기억된 인증 코드 및 카운터 무결성 트리에 근거하여 카운터 무결성 트리를 유지하고 데이터의 무결성을 검증하기 위한 데이터의 추가적인 암호화 또는 복호화 또는 동작을 행한다. 이 때문에, 일부 실시예에서는, 본 발명은 데이터 처리장치를 제어하여 전술한 방법을 제공하게 하는 컴퓨터 프로그램을 기억하는 기억매체를 제공한다. 컴퓨터 프로그램은 네트워크를 거쳐 다운로드하는 것 등에 의해 비일시적인 형태로 기록될 수도 있다.
도 1은 프로그램 명령을 실행하여 데이터 처리 연산을 행하는 적어도 한 개의 프로세서 코어(6)를 포함하는 집적회로 또는 시스템 온 칩(4)을 구비한 데이터 처리 시스템(2)의 일례를 개략적으로 나타낸 것이다. 도 1은 한 개의 프로세서 코어만을 나타내었지만, 시스템 온 칩(4)이 복수의 프로세서를 구비하는 경우도 있다. 각각의 프로세서 코어 또는 프로세서 코어 클러스터는 캐시(8)(또는 복수 레벨의 캐시 8, 10)을 갖는다. 메모리 제어기(12)는, 시스템 온 칩(4)과 별개의 집적회로 상에 있는 오프칩 메모리(14)에 대한 액세스를 제어하는 메모리 액세스 회로로서 동작한다. 온칩의 데이터에 대한 액세스는 공격자에 의해 부정 조작되기 어렵지만, 시스템 온칩의 가장자리가 신뢰 경계로서 작용하고, 메모리 제어기(12)와 오프칩 메모리(14) 사이의 물리 채널(16) 상의 데이터를 가로채거나, 데이터가 오프칩 메모리(14)에 기억되는 동안 데이터를 수정함으로써, 이 경계를 벗어나 지나가는 데이터는 공격에 취약하다. 도 1에는 신뢰 경계가 시스템 온 칩의 가장자리에 대응하는 일례를 나타내었지만, 다른 경우에는, 신뢰 경계를 벗어나 잠재적인 공격에 데이터를 노출시킬 수 있는 시스템 온 칩 내부에 신뢰 경계가 존재할 수도 있다.
시스템 온 칩(4)은, 시스템에 대한 물리적인 액세스를 하고 마이크로프로세서와 오프칩 시스템 메모리(14) 사이에서 교환되고 있는 데이터 또는 코드를 관찰 및/또는 재생할 수 있는 능력을 갖는 악의적인 당사자로부터 오프칩(14)의 보호 메모리 영역(22)에 기억된 데이터를 보호하기 위해 설치된 메모리 보안 유닛(20)을 구비한다. 보호 메모리 영역(22)은, 보호할 데이터(24)와, 데이터(24)의 검증에 사용된 무결성 트리 메타데이터(26)를 포함한다. 비보호 메모리 영역(28)이 오프칩 메모리(14) 내부에 더 설치되는데, 이 비보호 영역에 기억된 데이터(30)는 메모리 보안 유닛(20)에 의해 보호되지 않으므로, 공격자가 자유롭게 액세스하여 수정한다. 일부 구현예에서는, 보호 및 비보호 메모리 영역들 22, 28에 대한 어드레스들의 매핑은 하드웨어에 의해 고정되므로, 운영체계나 프로세서 코어(6)에 의해 실행된 다른 소프트웨어가 보호 메모리 영역(22) 또는 비보호 메모리 영역(28)에 어떤 어드레스가 매핑될 것인지 변경하는 것이 불가능하다. 이와 달리, 어드레스 매핑을 제어하는 운영체계가 신뢰될 수 있으면, 어떤 어드레스들이 보호 영역 또는 비보호 영역에 매핑될 것인지 제어하는 어드레스 매핑이 소프트웨어의 제어하에서 프로세서에 의해 변경되므로, 보호 및 비보호 영역들이 항상 오프칩 메모리(14) 내부의 동일한 물리 위치에 매핑될 필요가 없다. 일부 구현예에서는, 오프칩 메모리(14) 내부에 비보호 메모리 영역(28)이 존재하지 않을 수도 있는데, 이 경우에는 전체 오프칩 메모리가 보호 메모리 영역(22)인 것으로 간주할 수 있다.
메모리 보안 유닛(20)은 오프칩 메모리(14)에 기록되고 있는 데이터를 암호화하고 오프칩 메모리에서 판독된 데이터를 복호화하는 암호화/복호화 회로(32)를 구비한다. 이것은 악의적인 관찰자가 오프칩 메모리(14)에서 판독되거나 오프칩 메모리에 기억되는 데이터를 평문으로 보지 못하도록 함으로써 프라이버시를 제공한다. 암호화 및 복호화에 의해 사용되는 암호화 키는 시스템 온 칩 상의 온칩 메모리(예를 들어, SRAM)(34) 내부 또는 메모리 보안 유닛(20) 그 자체 내부에 기억된다. 암호화 및 복호화를 위해 모든 공지된 기술이 사용되고, 암호화 키를 보호하기 위한 모든 공지된 접근방법이 사용될 수 있다.
메모리 보안 유닛(20)은, 이하에서는 일반적으로 검증회로(36)로 부르는, 무결성 트리 생성 및 검증 회로(36)를 더 구비한다. 검증회로(36)는, 보호 메모리 영역에 무결성 트리(26)를 유지하는 역할을 한다. 무결성 트리는, 보호 영역(22)에 현재 기억된 데이터가 이 영역에 기록되었을 때와 여전히 같은지 여부를 검증하기 위한 다수의 정보를 제공한다. 데이터 무결성의 검사는, 예를 들어, AES-GCM이나 SHA-256 등의 일방향 암호 함수를 사용하여 기억된 데이터로부터 생성되는 메시지 인증 코드(MAC)를 사용하여 달성될 수 있는데, 이 일방향 암호 함수는, 공격자가 인증 코드를 생성하는데 사용된 비밀 키를 알지 못할 때 무차별 대입법에 의해 특정한 데이터 값과 관련된 인증 코드를 추측하는 것을 계산상 실현불가능하게 만드는 함수를 사용한다. 인증 코드는 데이터(24)와 함께 보호 메모리 영역(22)에 또는 별개의 데이터 구조로 기억된다. 데이터에 대한 기억된 MAC를 기억된 MAC를 생성하는데 사용된 것과 동일한 일방향 함수를 사용하여 기억된 데이터로부터 유도된 계산된 MAC와 대조하여, 기억된 MAC와 계산된 MAC 사이에 불일치가 검출되면, 이것은 데이터가 부정하게 조작되었다는 것을 표시한다.
그러나, MAC만 제공하는 것은 모든 공격을 방지하는데 충분하지 않을 수 있다. 또 다른 종류의 공격은, 시스템에 물리적으로 액세스하는 악의적인 사람이 암호화된 데이터와 버스 상에서 이전에 관찰된 MAC의 정당한 조합을 기억한 후, 특정한 메모리 위치에 있는 데이터를 오래된 값으로 변경하려는 의도에서 나중에 버스 상에서 이것들을 재생하여 시스템의 동작을 위태롭게 하는 재생 공격이다. 이와 같은 재생 공격은 무결성 트리(26)를 사용하여 방지될 수 있는데, 이 무결성 트리는, 트리의 각각의 리프 노드가 보호 메모리 영역(22) 내부의 데이터(24)의 블록들 중에서 한 개가 유효하다는 것을 검증하기 위한 무결성 데이터를 제공하고 리프 노드의 부모 노드가 리프 노드 그 자체가 유효한지 검사하기 위한 또 다른 무결성 데이터를 제공하는 노드들의 트리 구조를 제공한다. 부모 노드들 그 자체는 트리의 또 다른 부모 노드들을 사용하여 검사되고, 이것은 트리의 루프까지 위로 가로지를 때 계속되어, 이 루프가 최종적인 검증 소스를 제공한다. 온칩 메모리(34)에 기록된 루트 검증 데이터(38)를 사용하여, 트리의 루프 노드 그 자체를 온칩 위에 기억하거나, 또는 보호 메모리 영역에 기억된 루트 노드가 인증될 수 잇도록 하는 다른 정보를 기억함으로써, 트리의 루트가 진짜인지 검증한다.
메모리 보안 유닛(20)은, 특정한 데이터 블록들을 검사하는데 필요한 무결성 트리(25)의 노드들이 보호 메모리 영역(22) 내부에 위치하는 어드레스들을 계산하는 어드레스 산출회로(40)를 갖는다. 옵션으로, 메모리 보안 유닛(20)은, 무결성 트리의 노드들을 오프칩 메모리(14)에서 다시 판독해야 하는 경우보다 빠른 액세스를 위해 무결성 트리의 최근에 사용된 노드들을 캐싱하는 캐시(42)를 더 갖는다. 이와 달리, 메모리 보안 유닛(20)은 프로세서 코어(6)에 의해서도 사용되는 캐시들(10) 중에서 한 개를 액세스할 수 있으므로, 공유된 캐시(10) 내부에의 무결성 트리(26)로부터의 데이터의 캐싱은 메모리 보안 유닛(20)의 동작을 가속화하는데 도움이 될 수 있다.
무결성 트리가 구현될 수 있는 다양한 방법이 존재한다. 도 2는, 비교를 위해, 각각의 데이터 블록들에 대한 해시들(MAC들)로부터 구축된 해시 트리로서 무결성 트리(26)를 구현하는 제1 실시예를 나타낸 것이다. 도 2에 도시된 것과 같이, 각각의 데이터 블록(50)은 데이터 블록(50)의 콘텐츠에 MAC 해시 함수(54)를 적용하여 계산된 대응하는 MAC(52)을 갖는다. MAC 해시 함수(54)는, 데이터 블록의 갱신시마다 갱신되는 카운터(56)에 더 의존하여, 공격자가 비밀 키를 추론하기 더 곤란해지도록 신선도(데이터 및 비밀 키로부터 MAC이 유도되는 방식의 변화)를 제공한다. 이와 같은 접근방법에서, 각각의 MAC 생성을 위해 사용되는 카운터들(56)은 해시 트리(26)와 별개로 별도의 데이터 구조로 기억된다. 카운터들을 기억하는데 사용되는 데이터 블록들은 그 자체가 MAC을 사용하여 보호되는 데이터 블록들(50)의 일부일 수도 있다. 이와 달리, 카운터의 부정 조작이 대응하는 데이터 블록의 MAC 인증을 실패하게 만들 때 이 카운터의 부정 조작이 여전히 검출가능하기 때문에, 카운터들이 비보호 메모리 영역(28)에 기억될 수도 있다.
특정한 그룹의 데이터 블록들에 대해 계산된 모든 MAC들(52)은 무결성 트리(26)의 리프 노드(60) 내부에 함께 모여, 리프 노드가 특정한 범위의 어드레스 공간을 커버하는 MAC을 지정한다. 그후, 트리의 리프 노드(60)의 무결성은, 리프 노드(60)의 콘텐츠와 또 다른 카운터(64)에 근거하여 또 다른 MAC(62)을 계산하여, 그 자체가 무결성 트리(26)의 비리프(non-leaf) 노드(66) 내부에 다른 리프 노드들(60)로부터의 MAC들과 함께 기억되는 또 다른 MAC을 생성함으로써, 보호될 수 있다. 이와 같은 비리프 노드(66)는, 비리프 노드(66)에 기억된 MAC들을 갖는 리프 노드들(60) 각각의 부모 노드로서의 역할을 한다. 따라서, 각각의 부모 노드는 그것의 자식 노드들 각각에 기억된 모든 MAC들에 의해 커버되는 전체 메모리와 사이즈가 동등한 메모리의 블록을 보호하기 위해 MAC들을 기억한다. 예를 들어, 도 2의 경우에는, 트리가 8진(8-ary) 해시 트리이므로, 각각의 부모 노드가 8개의 자식 노드를 가져, 그것의 자식들 중에서 한 개에 의해 커버된 메모리 영역의 사이즈의 8배의 메모리 영역을 커버한다. 마찬가지로, 각각의 비리프 노드에 대해, 비리프 노드에 동일한 MAC 계산 함수를 적용하지만 이 비리프 노드 특유의 다른 카운터를 이용하여 또 다른 MAC이 계산된다. 한 개의 MAC에 의해 보호된 부모 노드에 자식 노드들의 MAC들을 함께 계속해서 그룹화함으로써, 결국 전체 보호 메모리 영역(22)이 함께 전체 보호 메모리 영역(220을 커버하는 다수의 자식 노드들에 대한 MAC들을 기억하는 루트 노드(66-R)로 줄어든다. 필요한 트리의 레벨들의 수는 보호 메모리 영역의 사이즈에 의존한다. 루트 노드(66-R)의 진정성은, 루트 노드 그 자체를 온칩 메모리(34)에 루트 검증 데이터(38)로서 기억하거나, 또는 도 2에 도시된 것과 같이 루트 노드의 또 다른 MAC을 계산하고 이 MAC(68)을 온칩 메모리(34)에 루트 검증 데이터(38)로서 기억함으로써 검증될 수 있다.
따라서, 데이터 값을 액세스하려고 할 때, 대응하는 데이터 블록(50)이 그것의 MAC을 발생하는데 사용되었던 것과 동일한 MAC 함수(54)를 겪으며, 그 결과를 트리의 대응하는 리프 노드(60)에 기억된 MAC과 비교한 후, 루트 노드에 도달하고 루트 노드도 검증될 때까지, 각각의 연속된 자식 노드를 그것의 부모 모드에서 얻어진 MAC에 근거하여 검증하면서 트리를 가로지른다. 타겟 데이터 블록(50)으로부터 루트 노드까지에 이르는 분기 상에의 각각의 노드들의 모든 검증이 성공하면, 데이터 액세스가 허용된다. 대응하는 데이터 블록이 갱신될 때(기록될 때) 각각의 카운터(56)가 증분되므로, 데이터 블록과 그것의 MAC 사이의 매핑이 시간 결과에 따라 변한다.
도 2에 도시된 접근방법의 문제점은, 특정한 데이터 값이 주어지지만 비밀 키를 알지 못할 때, 공격자가 대응하는 MAC를 추측하거나 무차별 대입법에 의해 그것을 크래킹할 수 있는 것이 계산상 실현불가능한 충분한 보안을 제공하기 위해서는, 각각의 MAC이 합당하게 큰 수의 비트, 예를 들어 64비트를 필요로 한다는 것이다. 이것은 한 개의 캐시 라인에 끼워넣어질 수 있는 MAC들의 수를 제한한다. 예를 들어, 캐시 라인이 512비트이면, 8개의 64비트 MAC들이 각각의 캐시 라인 내에 끼워넣어지므로, 트리의 각각의 노드는 8개의 자식 노드들을 갖도록 제한된다. 8진 해시 트리를 사용하면, 보호 메모리 영역의 사이즈가 증가함에 따라, 리프 모드로부터 루트까지 계속해서 가로질러야 하는 트리의 레벨의 수가 비교적 커진다. 한 개의 데이터 블록(50)이 부정 조작되지 않은 것을 검증하기 위해 액세스해야 하는 각각의 캐시 라인이 오프칩 메모리(14)와 메모리 제어기(12) 사이의 여분의 메모리 트래픽에 부가될 때, 이것이 성능에 영향을 미칠 수 있다. 마찬가지로, 오프칩 메모리 내부에서 데이터가 갱신될 때, 리프 노드에서 카운터를 증분하는 것은, 이 블록의 메모리에 대응하는 더 높은 노드에 있는 모든 MAC들이 갱신되는 것을 요구할 수 있으며, 한 개의 노드와 관련된 카운터에 대한 각각의 증분이 부모 노드에 있는 대응하는 MAC이 재계산되고 갱신되는 것을 필요로 하여, 그후 이것이 이 노드와 관련된 카운트의 증분을 기동하여, 루트에 도달할 때까지, 다음의 가장 높은 부모 노드에 기억된 MA의 재계산을 필요로 하고, 카운터의 추가적인 증분을 기동한다. 트리의 애리티가 낮을수록, 특정한 사이즈의 메모리 영역을 보호하기 위해 가로지를 필요가 있는 레벨의 수가 더 커지고, 성능에 대한 영향이 더 커진다.
도 3은 해시 트리 대신에 카운터 트리를 이용하여 무결성 트리(26)를 구현하는 또 다른 방법을 나타낸 것이다. 이 경우, 트리의 특정한 노드가 트리의 다음 노드에 있는 블록들을 인증하기 위해 사용하는 모든 MAC들을 제공하는 것이 아니라, 각각의 노드가 그 대신에 트리의 현재 노드의 각각의 자식 노드에 대한 별개의 카운터들을 정의한다. 무결성 트리(26) 그 자체의 일부가 아닌 보호 메모리 영역(22)의 각각의 데이터 블록은, 데이터 블록(50)의 콘텐츠와 카운터 무결성 트리(26)의 리프 노드(84)에서 판독되는 카운터에 근거하여 산출되는 MAC(80)에 의해 보호된다. 리프 노드(84)는 다양한 데이터 블록들(50)에 각각 대응하는 다수의 카운터들의 값을 지정한다. 본 실시예에서는, 특정한 데이터 블록(50)에 대해 계산된 MAC(80)이 대응하는 데이터와 동일한 캐시 라인 내부에 기억된다. 이것은 필수적인 것은 아니며, 다른 실시예에서는, MAC이 대응하는 데이터와 별개로 기억될 수도 있다. 트리의 각각의 리프 노드(84)에 대해, 리프 노드(84)와 리프 노드(84)의 부모 노드로서 동작하는 비리프 노드(88)로부터 판독된 카운터(86)의 콘텐츠에 근거하여 이와 유사한 MAC(80)이 산출된다. 각각의 비리프 노드(88)는 복수의 자식 노드들(84)을 위해 사용된 카운터들을 제공한다. 마찬가지로, 트리의 각각의 레벨에서, 특정한 자식 노드에 대해 MAC(80)을 계산하는데 사용된 카운터(86)는, 루트 노드(88-R)까지 계속해서, 이 자식 노드의 부모 노드에 대응하는 데이터 블록(88)으로부터 판독된다. 메모리 보안 유닛(20)의 어드레스 산출회로(40)는, 해당 주어진 타겟 데이터 블록에 대해, 어떤 다른 데이터 블록들이 관련된 카운터들을 제공하는 무결성 트리(26)의 필요한 노드들을 기억하는지 식별한다. 결국, 루트 노드(88-R)에 도달하고, 루트 노드에 대한 MAC(80)을 루트 노드와 루트 카운터(89)의 콘텐츠의 함수로서 산출한다. 루트 카운터(89)는 온칩 메모리(34)에 루트 검증 데이터(38)로서 기억될 수도 있다. 이와 달리, 트리의 전체 루트 노드(88-R)가 온칩 메모리의 루트 검증 데이터에 기억될 수도 있으며, 이 경우에는 이 루트 노드에 대한 추가적인 MAC을 산출할 필요가 없다.
요약하면, 도 3에 도시된 카운터 트리에 따르면, 트리의 각 레벨에서, 트리의 부모 노드로부터 판독된 카운터를 사용하여 산출되는 동일한 캐시 라인에 기억된 MAC을 사용하여 카운터 캐시 라인의 무결성이 확보된다.
해당하는 데이터 블록이 기록될 때마다 각각의 카운터가 증분되거나 갱신된다. 예를 들어, 비무결성(non-integrity) 트리 데이터를 제공하는 데이터 블록(50)이 갱신되면, 트리의 리프 노드들(84) 중에서 한 개의 내부에 있는 대응하는 카운터가 증분된다. 이때, 이것은 리프 노드(84)와 관련된 MAC(80)의 재계산을 요구하며, 이것은 루트까지 계속해서 트리의 다음의 가장 높은 부모 노드(88) 내부의 카운터의 증분을 기동하고, 이하 마찬가지이다.
카운터들 중에서 한 개가 오버플로우하여, 예를 들어, 카운터의 가장 큰 양의 값으로부터 가장 큰 음의 값 또는 제로값으로 랩 어라운드(wrap around)하면, 이전의 카운터 값들 중에서 한 개가 반복되므로, 재생 공격이 가능하게 될 수 있는 위험이 존재한다. 이 경우, 메모리 보안 유닛(20)은, 암호화 회로(32)에 의해 사용된 암호화 카들을 갱신하여, 마찬가지로 이것이 평문으로 보이는 특정한 데이터 값과 암호화된 데이터 값 및 카운터에 근거하여 생성된 MAC 사이의 다른 매핑을 강요하게 된다. 그러나, 암호화 키가 변경될 때, 보호 메모리 영역(22)에 있는 모든 데이터가 이전 키를 사용하여 복호화되고 새로운 키를 사용하여 재암호화된 후 메모리에 다시 기록할 필요가 있기 때문에, 이와 같은 암호화 키의 갱신은 비용이 많이 들 수 있다. 이것은 다수의 판독 및 기록을 필요로 하기 때문에 성능 면에서 비용이 많이 드는 동작이 될 수 있다. 이와 같은 보호 메모리 영역(22)의 전체 재암호화가 필요한 빈도를 줄이기 위해서는, 각각의 데이터 블록에, 이와 같은 오버플로우를 드물게 만드는데 충분한 수의 비트를 갖는 카운터를 설치하는 것이 바람직할 것이다. 예를 들어, 도 3에 도시된 접근방법에서는, 각각의 512비트 캐시 라인이 MAC을 위해 사용된 64비트를 갖고, 이것은 각각 56비트의 8개의 카운터들로 분할될 수 있는 카운터들에 대해 448비트를 남긴다. 각각의 카운터를 줄이는 것은 더 많은 카운터들이 한 개의 캐시 라인 내에 끼워넣어질 수 있도록 하지만, 이것은 성능에 영향을 미치는 더 빈번한 오버플로우를 발생한다. 이 때문에, 도 3에 도시된 접근방법도 트리의 애리티를 제한하는 경향이 있어(도 3의 실시예에서는 8의 애리티), 전체 트리가 보호 메모리 영역(22)의 특정한 사이즈를 커버하게 하기 위해 얼마나 빨리 트리가 부채 모양으로 펼쳐져 가로지를 필요가 있는 레벨들의 수를 증가시킬 수 있는지 제한한다.
도 4는 도 2 및 도 3에 도시된 실시예에 대해 성능을 향상시키기 위해 메모리 보안 유닛(20)에 의해 사용될 수 있는 분할-카운터 무결성 트리(26)를 나타낸 것이다. 카운터 트리는 도 3에 도시된 것과 유사한 리프 노드들 및 비리프 노드들 84, 88의 구성을 가져, 각각의 부모(비리프) 노드(88)가 각각의 그것의 자식 노드들에 대한 MAC들(80)을 산출하기 위한 카운터들을 제공하고 리프 노드들(84)이 다른 비무결성 트리 관련 데이터 블록들(50)에 대한 MAC들을 산출하기 위한 카운터들(820을 제공한다. 그러나, 도 4에서는, 트리의 노드들 중에서 적어도 일부가 분할-카운터 접근방법을 사용하는데, 이때 트리의 이 노드의 카운터들은 주 카운트 값(95)과 다수의 부 카운트 값들(97)을 이용하는 분할 형태로 표시된다. 부 카운트 값들 각각은 트리의 이 노드에 의해 커버되는 데이터 블록들 중에서 한 개에 대응한다. 특정한 데이터 블록에 대한 실제 카운터는, 주 카운트 값(95)(이것은 이 노드에 의해 커버된 모든 블록들 사이에서 공유된다)과 이 데이터 블록에 대해 지정된 특정한 부 카운트 값(97)의 조합에 의해 정의된다. 예를 들어, 블록 0에 대한 카운터는 블록 0에 대해 선택된 특정한 부 카운트 값과 연접된 주 카운트 값에 대응할 수 있으며, 블록 1에 대한 카운터는 블록 1에 대해 선택된 특정한 부 카운트 값과 연접된 공유된 주 카운트 값에 대응할 수 있으며, 이하 마찬가지이다. 이 때문에, 특정한 블록의 데이터에 대해 MAC(80)이 산출될 때, 부모 노드로부터의 공유된 주 카운터(95)와 특정한 데이터 블록에 대해 선택된 부 카운터들(97) 중에서 한 개와 함께 데이터 블록의 콘텐츠에 MAC 함수(54)가 적용된다. 각각의 부 카운터(97)는 대응하는 데이터 블록의 갱신시마다 증분된다. 부 카운터들(97)의 대응하는 세트의 어느 것이 오버플로우하면 공유된 주 카운터(95)가 증분된다.
분할-카운터 접근방법을 사용함으로써, 각각의 데이터 블록에 대해 별개의 카운터들을 여전히 가지면서, 각각의 데이터 블록에 대해 제공된 카운터의 전체 사이즈를 비교적 크게 할 수 있어, 공격자가 특정한 데이터 블록에 적용된 카운터 값을 구축하는 것을 더 어렵게 할 수 있다. 예를 들어, 64비트 MAC을 사용하는 512비트 캐시 라인에 64비트 주 카운터와 32개의 12비트 부 카운터가 설치되어, 각각의 데이터 블록에 대해 76비트 카운터를 효율적으로 제공할 수 있다. 이 때문에, 충분히 큰 주 카운터와 한 개의 부 카운터의 총 비트 수를 제공함으로써 전체 보호 메모리 영역의 재암호화를 필요로 하는 카운터 오버플로우의 가능성을 줄일 수 있다.
그러나, 한 개의 부모 노드에 의해 커버될 수 있는 자식 노드들의 수가 부 카운터들의 수에 의존하기 때문에, 도 4에 도시된 접근방법에서 부 카운터들은 도 3에 도시된 모노리식 카운터들보다 작은데, 이것은, 트리의 애리티가 크게 증가하여, 캐시 라인의 임의의 특정한 사이즈에 대해, 부모 모드 당 더 큰 수의 자식 노드들을 허용한다는 것을 의미한다. 도 4의 실시예에서는, 트리의 분할-카운터 노드에 대해 애리티가 32이다. 이것은, 트리의 부채 모양의 펼쳐짐이 훨씬 더 크므로, 특정한 양의 메모리를 커버하기 위해 더 적은 수의 레벨이 필요하다는 것을 의미한다. 도 4의 리프 노드(84)에 나타낸 것과 같이, 트리의 모든 노드들이 분할-카운터 접근방법을 사용하는 것은 필수적인 것은 아니며, 예를 들어, 일부는 여전히 도 3에 도시된 모노리식 접근방법을 사용할 수 있으므로, 도 4의 실시예에 대해 다른 애리티, 예를 들어 8을 가져도 된다. 이것은, 보호 메모리 영역의 전체 사이즈가 분할 카운터 노드들에서 사용된 애리티의 정확한 거듭제곱에 대응하는 블록들의 수에 매핑되지 않아, 더 낮은 애리티의 일부 노드들이 필요한 경우에 유용할 수 있다.
도 5에 도시된 것과 같이, 각각의 분할-카운터 노드에 대해 애리티가 동일할 필요는 없다. 트리가 루트 노드를 향해 위로 가로지름에 따라 애리티를 줄이는 것이 유용할 수 있다. 이것은, 트리가 루트 노드를 향해 상승함에 따라, 기록 트래픽이 지수적으로 증가하므로, 카운터가 오버플로우할 가능성이 더 크기 때문이다. (리프에 더 가까운) 하부 레벨보다 더 낮은 애리티를 갖는 (루트에 더 가까운) 트리의 상부 레벨을 구현함으로써, 전체적으로 더 양호한 성능을 제공할 수 있다. 도 5에는, 48개의 8비트 부 카운터들이 설치되는 48진 노드(100)와, 36개의 10비트 부 카운터들이 설치되는 36진 부모 노드들(102)과, 32개의 12비트 부 카운터들을 갖는 32진 조부모 노드(104)를 갖는 예를 나타낸다. 트리의 위로 감에 따라 부 카운터들의 사이즈를 증가시킴으로써, 카운터 오버플로우로 인해 메모리의 더 큰 영역들이 그들의 MAC들을 재계산해야 하는 횟수를 줄일 수 있다. 물론, 도 5에 도시된 주 카운터, 부 카운터들 및 MAC의 특정한 사이즈는 단지 일례이며, 이용가능한 캐시 라인 사이즈와 특정한 시스템의 요구사항에 따라 이들 사이즈가 변경될 수 있다.
도 5에 도시된 것과 같이, 트리의 노드들 중에서 일부는 2의 정확한 거듭제곱이 아닌 애리티, 예를 들어 도 5에 도시된 36진 또는 48진을 갖는다. 이것은 더 복합한 어드레스 산출회로(40), 예를 들면, 어드레스 비트들의 서브셋에 근거한 색인 대신에 룩업 테이블을 필요로 하지만, 2의 거듭제곱이 아닌 애리티를 사용하는 것은, 오버플로우의 가능성과 판독/기록시마다 가로지를 필요가 있는 트리 레벨들의 수 사이에서 더 양호한 균형을 제공하여, 더 복잡한 어드레스 생성에도 불구하고 전체적인 성능 향상을 제공하므로, 유용할 수 있다.
도 4 및 도 5의 실시예에서는, 트리의 각각의 분할-카운터 노드가 이 노드의 모든 자식 노드들에 대해 모든 주 카운터들 사이에서 공유되는 한 개의 주 카운터(95)를 지정한다. 그러나, 도 6에 도시된 것과 같이, 이것은 필수적인 것은 아니며, 어떤 경우에는 트리의 특정한 노드가 부 카운터들(97)의 일부에 각각 대응하는 복수의 주 카운터(95)를 지정할 수도 있다. 노드 당 추가적인 주 카운터들을 지정하는 것은 캐시 라인의 특정한 사이즈에 설치될 수 있는 부 카운터들의 수를 줄일 수 있지만, 어떤 경우에는, 부 카운터가 오버플로우할 때, 동일한 주 카운터를 공유하는 다수의 데이터 블록들이 주 카운터가 증분될 때 그들의 MAC들을 재계산해야 하는 것은 아니기 때문에, 오버헤드를 줄이는데 바람직할 수 있다.
도 4 및 도 5의 실시예는 데이터 블록과 관련된 MAC(80)을 데이터 그 자체와 동일한 캐시 라인에 기억하지만, 도 7에 도시된 것과 같이, 이것은 필수적인 것은 아니며, 다른 구현예는 캐시 라인(112)과 별개의 캐시 라인에 MAC(80)을 기억할 수 있는데, 이것은 MAC에 의해 보호되는 데이터 블록 또는 무결성 트리 노드를 제공한다. 예를 들어, MAC980)은 류 정정 코드(ECC)를 기억하기 위한 전용 영역을 갖는 메모리 칩의 ECC 영역에 기억될 수도 있다.
도 8은 데이터가 오프칩 메모리(14)에서 판독되도록 하는 요구에 대한 판독 액세스를 처리하는 방법을 나타낸 흐름도이다. 판독 액세스는, 예를 들어, 프로세서 코어(6)에 의해 실행된 로드 명령에 의해, 또는 캐시 제어기에 의해 개시된 프리페치 요구에 의해 기동된다. 스텝 200에서, 메모리 제어기(12)에 의해 판독 액세스 요구가 수신된다. 스텝 202에서, 메모리 제어기는, 판독 액세스 요구의 어드레스에 의해 지정된 타겟 데이터 블록이 보호 메모리 영역(22)에 매핑되는지 여부를 판정한다. 타겟 어드레스가 비보호 메모리 영역(28)에 매핑된 경우, 스텝 204에서, 판독 액세스는, 무결성 트리(26)에 무관하게, 무결성 검증이 없이 처리하도록 허용되고, 복호화를 행하지 않고 데이터가 판독된다. 오프칩 메모리에서 판독된 데이터는 프로세서 코어 및/또는 캐시에 반환된다.
타겟 어드레스가 보호 메모리 영역(22) 내부의 데이터 블록에 매핑되면, 스텝 206에서, 검증회로(36)는, 타겟 데이터 블록으로부터 판독된 데이터와, 트리가 트리(26)의 루트 노드까지 위로 가로지를 때 타겟 데이터 블록과 동일한 분기 위에 있는 카운터 무결성 트리의 한 개 이상의 조상 노드들에 대해 무결성 검증을 행한다. 해당 무결성 트리 분기 상의 데이터 블록들 각각에 대해, 무결성 트리 검증회로(36)는, 해당 데이터 블록에 기억된 데이터와 트리의 부모 노드에 의해 지정된 그것의 대응하는 카운터의 함수인 계산된 MAC을 산출한다. 부모 노드가 분할-카운터 노드인 경우, 공유된 주 카운터와, 이 부모 노드에 의해 커버된 메모리의 블록 내부의 해당 데이터 블록의 위치에 따라 부모 노드로부터 선택되는 선택된 부 카운터의 조합에 의해 그것의 카운터가 정의된다. 검사되고 있는 데이터 블록에 대해 계산된 MAC를 기억된 MAC와 비교하여, 스텝 208에서, 타겟 블록 각각과, 카운터 무결성 트리의 한 개 이상의 선조 노드들에 대해 기억된 MAC와 계산된 MAC가 일치하는지 여부를 판정한다. 스텝 206에서 테스트된 데이터 블록들 중에서 어느 것에 대해 기억된 MAC와 계산된 MAC 사이에 불일치가 존재하면, 스텝 210에서, 운영체계를 끌여들여 보안 위반을 처리하게 하는 것, 또는 오프칩 메모리(14)에 대한 액세스를 불능으로 하는 것, 또는 전기 접속부를 통한 퓨징(fusing)하여 메모리에 대한 계속된 액세스를 금지하는 것 등의 물리적인 대응책을 취하는 것 등의 보안 위반 응답이 기동된다. 테스트된 블록의 어느 것에 대해 불일치가 검출되면, 스텝 212에서, 데이터 액세스가 허용되므로, 원래의 대상으로 하는 데이터 블록에서 판독된 데이터가 암호화/복호화 회로(32)에 의해 복호화된 후, 프로세서나 캐시들 중에서 한 개에 의해 사용하기 위해 복호화된 형태로 반환된다.
따라서, 스텝 206에서의 검증은 무결성 트리의 각 단계를 검사하기 위해 보호 메모리 영역에 있는 일련의 다양한 데이터 블록들의 검증을 요구한다. 이와 같은 검증을 위해 필요한 판독은 임의의 순서로 기동될 수 있으며, 마찬가지로 판독된 데이터 블록들 각각에 대해 예측된 MAC를 산출하고 이것들을 기억된 MAC들과 비교하는 대응하는 검증 계산도 임의의 순서로 기동될 수 있다. 일부 실시예에서는 원래의 타겟 데이터 블록에 대한 판독이 이 타겟 데이터 블록에 대한 타겟 카운터를 얻기 위해 다른 데이터 블록의 판독을 기동한 후, 이 판독 그 자체가 추가적인 판독을 기동하므로, 판독이 실제로 타겟 데이터 블록에서 개시하여 루트 노드에 이를 때까지 트리의 각각의 더 높은 레벨에 대한 추가적인 판독을 연속적으로 기동하는 시퀀스로 발생하지만, 이것은 필수적인 것은 아니다. 판독 액세스 요구에 의해 지정된 타겟 데이터 블록을 식별하는 판독 타겟 어드레스가 주어지며 다른 실시예에서는, 어드레스 산출회로(40)가 판독된 타겟 어드레스를 타겟 데이터 블록의 무결성을 검증하는데 필요한 무결성 트리의 각 노드에 대한 어드레스에 매핑하므로, 트리 노드 가계의 시퀀스와 다른 순서로 다수의 병렬 판독이 발생하거나, 트리의 판독의 일부가 기동될 수도 있다. 따라서, 판독 액세스시에, 트리에서의 필요한 검증이 행해지는 순서는 중요하지 않다.
도 9는 메모리 제어기(12) 및 메모리 보안 유닛(20)에 의해 오프칩 메모리(14)에 대한 기록 액세스를 제어하는 방법을 나타낸 흐름도이다. 스텝 250에서, 메모리 제어기(12)는 오프칩 메모리(14)에 매핑된 어드레스를 지정하는 기록 액세스를 검출한다. 기록 액세스는, 예를 들면, 프로세서 코어(6)에 의해 실행된 스토어 명령, 또는 캐시 제어기에 의해 기동된 캐시 후기록(writeback)에 의해 기동될 수도 있다. 스텝 252에서, 메모리 제어기는, 기록 액세스 요구에 의해 지정된 어드레스가 보호 메모리 영역(22)에 있는 타겟 데이터 블록을 식별하는지 여부를 판정한다. 식별하지 않은 경우에는, 마찬가지로 메모리 보안 유닛(20)에 의해 제공된 보호가 필요하지 않으므로, 스텝 254에서 암호화가 적용되지 않고 무결성 검증이 행해지지 않으면서 타겟 데이터 블록에 기록 데이터가 기록된다. 또한, 무결성 트리(26)에 대한 수정이 행해지지 않는다.
스텝 252에서, 타겟 데이터 블록이 보호 영역(22)에 있는 것으로 밝혀지면, 스텝 262에서, 무결성 트리 생성회로(36)는 기록 액세스 요구에 의한 기록 액세스를 겪은 타겟 데이터 블록과 관련된 카운터가 무결성 트리(26)의 분할-카운터 노드에 의해 정의되는지 여부를 판정한다. 정의되지 않는 경우에는, 스텝 264에서, 타겟 블록과 관련된 모노리식 카운터가 증분된다. 증분은, 카운터의 현재 값에 1을 가산하는 것에 대응하거나, 각각의 카운터가 취하는 일부 알려진 시퀀스에서 카운트 값을 그것의 현재 값으로부터 다음 값으로 전환하는 것에 대응할 수도 있다. 스텝 266에서, 카운터에 대한 증분이 카운터가 이전에 사용된 값으로 랩 백(wrap back)한 오버플로우를 일으켰는지 여부가 무결성 트리 생성회로(360)에 의해 판정된다. 오버플로우가 발생하면, 이것은, 마지막으로 전체 보호 메모리 영역(22)에 대한 전역 암호화 또는 MAC 계산에 영향을 미치는 파라미터들이 갱신되었을 때 이후에 타겟 블록에 대해 제공될 수 있는 모든 가능한 카운트 값들이 사용되었다는 것을 의미한다. 따라서, 스텝 268에서, 보호 메모리 영역(22)의 모든 데이터 블록에 대해 사용되는 모든 전역 암호화 키들 또는 MAC 생성 피연산자들이 갱신된다. 암호화 키들의 갱신될 때, 이것은, 보호 메모리 영역(22)에 있는 모든 데이터가 판독되고, 암호화/복호화 로직(32)에 의해 복호화된 후, 새로운 키들로 재암호화되어 보호 메모리 영역(22)에 다시 기록되어야 한다는 것을 의미한다. 재암호화가 행해지는지 여부에 무관하게, MAC을 생성하는데 사용된 함수가 변경되거나 MAC을 산출하기 위해 사용하는 암호화된 데이터가 변경되었기 때문에, 전체 보호 메모리 영역에 대해 카운터 무결성 트리와 MAC들이 재계산되어야 한다. 이 때문에, 스텝 268에서의 연산은 성능면에서 비교적 비용이 많이 들지만, 충분한 수의 비트들의 카운터를 사용하는 경우 이들 이벤트가 드물 수 있다.
스텝 266에서 오버플로우가 발생하지 않으면, 전체 보호 영역에 대한 MAC들과 카운터들을 재계산할 필요가 없다. 그 대신에, 스텝 270에서, 기록 데이터 액세스시에 지정되었던 기록 데이터의 새로운 암호화된 버전에 근거하여, 또한 스텝 264에서 발생된 증분된 모노리식 카운터에 근거하여, 타겟 데이터 블록에 대응하는 MAC이 재계산된 후, 재계산된 MAC의 보호 영역(22), 예를 들어, 데이터 그 자체와 동일한 캐시 라인에 기억된다. 카운터가 스텝 264에서 갱신되었을 때, 갱신된 카운트 값이 트리의 더 높은 레벨에 위치한 리프 노드 또는 부모 노드에 기록될 필요가 있으므로, 스텝 272에서 이 더 높은 노드의 어드레스를 지정하고 기록될 카운터의 갱신된 갑을 지정하는 추가적인 기록 액세스가 기동된다. 이 때문에, 이것은 이 추가적인 기록 액세스에 대한 도 9의 방법을 행하는 또 다른 인스턴스를 기동한다.
한편, 스텝 262에서, 원래의 기록 액세스에 의해 지정된 타겟 데이터 블록에 대한 카운터가 무결성 트리의 분할-카운터 노드에 의해 정의되는 것으로 판정된 경우, 스텝 274로 방법이 진행한다. 스텝 274에서, 무결성 트리 생성회로(36)는 타겟 데이터 블록에 대응하여 선택된 부 카운터를 증분한다. 이것은 원래의 기록 요구에 의해 기록되고 있는 타겟 블록 전용의 특정한 부 카운터이다. 스텝 276에서는 이와 같은 증분으로 인해 부 카운터가 오버플로우하였는지 여부를 판정한다. 오버플로우하지 않은 경우에는, 스텝 278에서, 원래의 기록 요구의 암호화된 기록 데이터, 타겟 블록과 동일한 주 카운터를 사용하는 다른 모든 블록들 사이에서 공유되는 공유된 주 카운터와, 스텝 274에서 선택된 특정한 부 카운터의 증분된 버전에 근거하여, 타겟 데이터 블록에 대한 MAC이 재계산되고, 결과적으로 얻어지는 MAC이 암호화된 기록 데이터와 관련하여 메모리에 기억된다.
스텝 276에서 부 카운터의 오버플로우가 발생하면, 스텝 280에서 타겟 블록의 부모 노드에 있는 공유된 주 카운터가 증분된다. 스텝 282에서 주 카운터가 오버플로우하였는지 판정된다. 오버플로우하지 않은 경우에는, 스텝 284에서, 타겟 데이터 블록과 주 카운터를 공유하는 각각의 다른 블록에 대해 MAC들이 재계산되고, 재계산된 MAC들이 이들 블록 각각에 대해 메모리에 기억된다. 이 다른 블록들에 대한 각각의 MAC은, (MAC을 재계산할 목적으로 메모리에서 판독된) 이들 블록에 기억된 현재 데이터와, 이들 다른 블록들 각각에 대한 증분된 주 카운터와 특정한 부 카운터에 근거하여 산출된다. 즉, 각각의 다른 블록은 부 카운터들 중에서 다른 한 개와, 동일한 증분된 주 카운터를 사용한다. 오버플로우한 부 카운터를 갖는 노드가 무결성 트리의 리프 노드인 경우, MAC들을 재계산하기 전에 재계산된 MAC들을 갖는 다른 블록들 각각과 관련된 데이터가 새로운 카운터를 사용하여 재암호화된다. 부모 노드가 비리프 노드이면, 다른 블록들에 있는 데이터를 재암호화할 필요가 없다. 스텝 284 후에, 전술한 것과 동일하게 스텝 278을 행하여, 타겟 블록에 대한 새로운 암호화된 기록 데이터, 증분된 공유된 주 카운터와, 타겟 블록에 특정한 증분된 부 카운터에 근거하여 타겟 블록에 대한 MAC을 재계산한다. 스텝 284가 행해졌는지 아닌지에 무관하게, 스텝 278 이후에, 스텝 272로 방법이 다시 진행하여, 추가적인 기록 액세스 요구를 기동하여 스텝 274 또는 280에서 발생된 증분된 카운터를 갱신한다. 한편, 스텝 282에서 주 카운터가 오버플로우하면, 이 상황이 스텝 266과 유사하므로, 마찬가지로 스텝 268에서 전역 갱신 동작을 행하여 암호화 키들이나 MAC 생성 피연산자를 갱신한 후, 필요한 경우에는 보호 메모리 영역(220의 재암호화를 행하고, 새롭게 갱신된 파라미터들에 대해 무결성 트리(26)가 완전히 재계산된다. 루트 노드에 대한 MAC이 갱신되고 루트 노드 카운터(89)가 증분되면 도 9의 방법이 종료한다.
도 9에는 이해를 용이하게 하이 위해 스텝 270/278/284 및 272 각각에서 메모리에 재계산된 MAC들과 증분된 카운터들을 기록하기 위한 별개의 기록이 도시되어 있지만, 특정한 부모 노드에 대한 MAC이 이 부모 노드의 자식 노드들과 관련된 카운터들과 동일한 캐시 라인에 기억되는 실시예에서는, 한 개의 캐시 라인에 대한 모든 필요한 갱신이 준비가 될 때까지 MAC과 카운터 갱신이 메모리 보안 유닛(20) 내부에 버퍼링되므로, 오프칩에 갱신된 캐시 라인을 기록하는데 단지 한번의 기록 요구가 필요하다. 마찬가지로, 병렬로 행해지는 서로 다른 비무결성(non-integrity) 트리 타겟 데이터 블록들(50)에 대한 복수의 기록 요구가 존재하는 경우에는, 서로 다른 타겟 데이터 블록들(50)에 대한 카운터 갱신들 중에서 일부가 동일한 무결성 트리 노드에 있는 서로 다른 카운터들이 갱신되는 것을 요구할 수 있으므로, 카운터를 버퍼링함으로써 메모리 시스템 유닛(20) 내부의 갱신이 한 개의 캐시 라인에 있는 이와 같은 복수의 카운터 갱신들이 한번의 기록 트랜잭션시에 오프칩 메모리(14)에 행해질 수 있도록 할 수도 있다. 이 때문에, 카운터 및 MAC 갱신을 행하기 위해 오프칩 메모리(14)에 트랜잭션에 개시되는 정확한 방식은 구현마다 변동될 수도 있다는 것을 알 수 있다.
특정한 노드의 부 카운터들(97)을 가능한한 작게 하는 것이 메모리의 동일한 영역을 보호하기 위한 카운터-트리의 레벨의 수의 감소를 허용하여, 트리의 횡단 중에 더 적은 메모리 트래픽과 그후의 성능 향상을 제공하기 때문에 바람직하다. 더구나, 카운터 캐시라인 당 부 카운터들의 더 큰 수는 더 양호한 캐시가능성(cacheability)을 제공하고(캐시 내부에서의 적중시까지만 횡단이 계속되므로) 트리 횡단중에 카운터들을 페치하기 위한 메모리 액세스들의 횟수를 줄인다.
플립(flip)측에서는, 리프 노드에서의 부 카운터의 오버플로우는, 오버플로우로 인해 증분되었던 주 카운터를 사용하여 암호화되고 인증되는 메모리 내에 존재하는 모든 캐시 라인들에 대해 MAC들의 재암호화 및 재계산을 의미한다. 무결성 트리 그 자체는 암호화되지 않은 포맷으로 기억되기 때문에, 비리프 노드에서의 부 카운터 오버플로우는 MAC 재계산 오버플로우를 일으킨다. 그러나, 부모 노드 부 카운터는 자식 노드에 있는 부 카운터들 중에서 어느 것에 대한 기록시에 증분되므로, 트리에서 상승함에 따라, 기록 수가 증가하여 더 많은 오버헤드를 일으킬 수 있다. 따라서, 재암호화 및 MAC 재계산 오버헤드를 관리할 수 있는 경우에만, 작은 부 카운터들에 의해 제공되는 작은 발자국(footprint)과 더 양호한 캐시가능성 특성이 무결성 보호에 대한 메모리 트래픽 오버헤드를 줄일 수 있다. 특정한 노드에 대해 부 카운터 사이즈가 고정되면, 이들 경쟁하는 요구를 화합시키는 것이 곤란하다.
이를 위해, 트리의 애리티에 영향을 미치지 않으면서 부 카운터들의 사이즈를 변경하는 메카니즘을 제공한다. 이것을 도 10 내지 도 13에 나타낸다. 메모리에 빈번하게 기록되는 경향이 있는 캐시라인들에 대해, 트리의 애리티에 영향을 미치지 않고 부 카운터 사이즈가 증가된다. 높은 애리티의 콤팩트한 트리는 무결성 보호를 위한 더 적은 수의 메모리 액세스의 이점을 제공하고, 빈번하게 기록된 캐시라인들에 대한 더 큰 부 카운터들은 재암호화 및 MAC 재계산 오버헤드의 검사에 도움이 된다. 이와 같은 거동을 달성하기 위해, 부 카운터들의 사이즈를 표시하는데 사용되는 카운터 캐시 카운터 캐시 라인에 있는 MAC으로부터 적은 수의 비트들을 훔친다. 이들 비트들 중에서 최소의 값(00)을 사용하여 최소의 부 카운터 사이즈(도 10-13의 실시예에서는 3비트)를 표시할 수 있다.
도 10에 도시된 것과 같이, 메모리 보안 유닛(20)은, 모든 카운터들이 최소의 사이즈(예를 들어, 3비트)를 갖는 주 카운터 트리(26)를 구성함으로써 개시한다. 각각의 노드에 있는 부 카운터들의 사이즈는, 본 실시예에서는 MAC의 사이즈를 64비트 대신에 62비트로 줄임으로써 이용가능하게 되는 2비트인, 사이즈 필드(402)에 표시된다. 이때, 부 카운터 사이즈를 증가시키는 것이 필요한 경우에 추가적인 미러 노드들을 수용하게 되는 미러 트리(400)가 아직 존재하지 않는데, 미러 트리(400)는 후술하는 것과 같이 필요할 때 할당될 수 있다. 이와 달리, 미러 트리(9400)에 대한 공간은 메모리 내부에 이미 할당될 수도 있지만, 미러 트리(400)가 아직 채워지지 않아도 된다.
주 카운터 트리(26)를 전술한 실시예와 동일하게 사용하여, 데이터 블록의 콘텐츠와, 이 데이터 블록과 관련된 부모 노드에서 취한 주 카운터 및 부 카운터에 근거하여 산출된 MAC과 그것의 관련된 MAC을 비교함으로써 특정한 데이터 블록의 무결성을 검사한다. 트리 위로 가로지르는 각 노드의 복수의 무결성 검사를 루트까지 행하여, 각 카운터가 그 자체가 유효한지 검사할 수 있다. 루트 노드의 무결성을 검증하기 위한 루트 검증 정보(89)는 전술한 것과 같이 온칩 메모리에 기억된다. 데이터 블록에 대한 기록시에, 관련된 리프 노드 카운터가 증분되고, 이 노드의 MAC이 재계산된다.
이것은, 주 트리의 특정한 노드 88의 부 카운터들의 사이즈를 증가시키는 것이 유용할 것으로 표시하는 사이즈 증가 트리거 이벤트가 검출될 때까지 계속된다. 예를 들어, 사이즈 증가 트리거 이벤트는 특정한 노드에서의 부 카운터의 검출된 오버플로우일 수 있다. 또한, 사이즈 증가 트리거 이벤트는, 임계값을 초과하는 특정한 노드의 주 카운터들의 오버플로우의 레이트이거나, 일부 다른 조건을 만족하는 오버플로우들의 레이트일 수 있다. 또한, 일반적으로, 특정한 트리 노드에 대해 검출된 오버플로우의 빈도나 패턴, 재암호화나 MAC 재계산에 관한 측정기준(metric)을 모니터링하여, 부 카운터들의 사이즈를 증가시킬 것인지 여부를 판정하는데 사용할 수 있다. 다른 실시예에서, 사이즈 증가 트리거 이벤트는, 보호 영역의 관련된 서브셋과 관련된 메모리 트래픽의 레벨이 임계값보다 큰 것을 검출하는 것을 포함하고, 이때 보호 영역의 관련된 서브셋은 관련된 서브셋 내부의 임의의 타겟 블록의 무결성을 검증하는 것이 특정한 분할-카운터 노드에 의존하는 보호 영역의 일부분을 포함한다. 예를 들어, 메모리 보안 유닛은 보호 영역의 특정한 부분들과 관련된 메모리 트래픽의 볼륨을 모니터링할 수도 있다. (루트에 더 가까운) 트리의 더 높은 레벨에 있는 노드는 보통, (트리를 가로지르는 각각의 연속적인 카운터를 검증하는데 필요한 MAC 계산의 시퀀스로 인해) 그들의 카운터가 더 큰 수의 데이터 블록들의 무결성을 검사하는데 관여하기 때문에, 더 낮은 레벨에 있는 노드 들보다 보호 영역의 더 큰 부분과 관련된다. 이 때문에, 트리의 특정한 노드에 따라 무결성이 검증되는 부분에 큰 볼륨의 트래픽이 존재하는 경우, 대응하는 노드가 그것의 부 카운터 사이즈를 증가시킬 수도 있다. 예를 들어, 메모리 트래픽의 모니터링은, 프로세서 코어(6)의 최종 레벨 캐시(10)로부터 오프칩 메모리(14)에의 기록 횟수의 추적에 근거하거나, 또는 메모리 보안 유닛(20)에 의한 그 자신의 내부 캐시(42)로부터 오프칩 메모리(14)까지의 기록 횟수의 추적에 근거할 수도 있다.
따라서, 일반적으로, 메모리 보안 유닛(20)은, 주 트리(26)의 특정한 노드에 있는 부 카운터들이 너무 작다는 것을 나타내는 사이즈 증가 트리거 이벤트를 식별한다. 부 카운터의 사이즈를 증가시킬 필요성이 식별되면, 메모리 보안 유닛(20)은 같은 사이즈를 갖는 한 개 이상의 미러 서브트리(들)(400)를 주 트리(26)에 할당한다. 주 트리의 식별된 노드에 있는 모든 부 카운터들에 대한 부 카운터 사이즈가 최소 사이즈(예를 들어, 도 1에서는 6비트)의 정수배로 증가되고, 이 노드의 부 카운터들의 분율 f만이 원래 위치에 기억된다(예를 들어, 도 11에서는 f=0.5). 이 노드의 부 카운터들의 나머지는, 주 트리 내부의 주 노드에 대해 사용된 오프셋과 미러 트리(400) 내부의 동일한 오프셋에 배치되는 미러 트리(400)의 대응하는 노드에 할당된다. 이 노드의 부 카운터들의 서브셋이 미러 트리(400)의 대응하는 미러 노드(404)에 실제로 기억되는 것을 나타내도록 주 노드의 사이즈 필드(402)가 갱신된다.
도 11은 주 트리의 노드 N127이 더 큰 부 카운터들을 필요로 하는 예를 나타낸 것이다. 따라서, 부 카운터들이 6비트 카운터들로 증가되는데, 이것은, 노드 N127의 128개의 자식 노드들 N127_0 내지 N127_127과 관련된 128개의 부 카운터들 중에서 64개를 기억하기 위한 공간만 존재한다는 것을 의미한다. 이 때문에, 노드 N127의 필드 402에 있는 사이즈 필드 값 0b01은, 부 카운터들 0-63이 이 노드 자체에 기억되지만, 부 카운터들 64-127이 미러 트리(400) 내부의 대응하는 미러 노드 127'에 기억된다는 것을 식별한다.
미러 트리 내부의 새롭게 할당된 노드를 사용하여 특정한 주 트리 노드의 부 카운터들의 사이즈를 증가시킬 때, 메모리 보안 유닛(20)은 다음과 같은 단계들을 행한다:
1. 방금 오버플로우한 부 카운터를 오버플로우 이전의 값으로 롤백한다.
2. 부 카운터가 사이즈 증가전에 M 비트를 갖고 사이즈 증가 이후에 N 비트를 갖는 경우, 주 노드와 적어도 한 개의 미러 노드에 있는 각각의 N비트 미러 카운터에 대해,
부 카운터의 M개의 최하위 비트들을 오버플로우 이전의 대응하는 부 카운터의 값과 같이 설정하고,
부 카운터의 (N-M)개의 최상위 비트들을 특정한 주 트리 노드의 주 카운터의 (N-M)개의 최하위 비트들과 같게 설정한다.
3. 특정한 주 트리 노드의 주 카운터를 (N-M) 비트만큼 우측으로 시프트한다(이에 따라, 부 카운터들로 시프트된 비트들이 시프트 아웃되고 (N-M)개의 선두 0들이 주 카운터의 나머지 비트들 앞에 붙는다).
4. 그후, 오버플로우한 부 카운터를 다시 증분한다.
예를 들어, (간략을 위해 더 작은 카운터 사이즈를 사용하는) 4비트 주 카운터와 4개의 2 비트 부 카운터들을 갖는 노드를 고려하자. 더구나, 카운터가 다음과 같은 (이진) 값들을 갖는 것으로 가정한다:
주 C 부 C들
0101 01 10 11 00
(4번째 미러 카운터가 11->00으로 오버플로우하였기 때문이) 사이즈 증가 이벤트가 부 카운터를 4비트로 증가시킨 경우, 갱신된 주 트리 노드와 미러 노드들은 다음과 같이 보일 것이다:
주 트리 노드: 부 트리 노드:
주 C 부 C들 주 C 부 C들
0001 0101 0110 0001 0111 1000
이때, N=4, M-2이므로, (N-M)=2, 즉 모든 부 카운터들에 2개의 추가적인 비트를 부가하였다. 따라서, 모든 부 카운터들을 주 카운터의 2개의 lsb의 비트들로 앞에 붙이고, 주 카운터를 2개의 0들로 앞에 붙인다.
이와 같은 연산은, 주 카운터:부 카운터의 조합이 영향을 받는 노드에 있는 다른 모든(오버플로우하지 않은) 부 카운터들에 대해 변경되지 않은 채 유지되므로, 비용이 많이 드는 재암호화/MAC-재계산이 필요가 없어진다.
이 때문에, 노드 127의 자식 노드 N127_0의 MAC을 인증할 때, 부 카운터가 부모 노드 N127 그 자체로부터 선택되지만, 노드 N127의 다른 자식 노드 127_127의 MAC을 인증할 때에는, 부 카운터가 미러 노드 127'으로부터 판독된다. 주 노드 N127과 미러 노드 N127' 노드가 주 트리에 동일한 부모 노드를 공유하므로, (본 실시예에서는 루트 노드에서 취한) 동일한 주 및 부 카운터들을 사용하여 주 및 미러 노드들 N127, N127'과 관련된 MAC들을 계산한다. 각각의 미러 노드(404)가 주 트리의 노드들 88과 동일한 레이아웃을 갖더라도, 미러 노드(404)와 이에 대응하는 주 노드(88)에서 모든 부 카운터들 사이에서 공유되는 주 카운터(95)가 주 노드(88) 그 자체에서 지정되므로, 주 카운터 필드(95)가 미러 노드(404)에서 사용될 필요가 없다.
도 11에 도시된 나머지 노드들(루트 노드, NO, N127_0, N127_127)에 대해, 부 카운터들의 사이즈를 증가시킬 필요가 아직 없으므로, 미러 트리 내부의 대응하는 위치들(456)이 아직 채워지지 않는다. 미러 트리(400)는 성기게 채워진 구조이며, 이것에 대해 메모리 내부의 공간이 주 트리(26)와 같은 사이즈를 갖는 전체 트리를 수용하기 위해 할당되지만, 주 트리의 어떤 노드들(88)이 가장 많은 메모리 트래픽을 갖는지에 따라 미러 트리(400)의 선택된 노드들만 채워지므로, 오버플로우의 빈도를 줄이기 위해 각각의 부 카운터에 대해 추가적인 비트들을 필요로 할 것으로 판정된다. 이 때문에, 필요한 것보다 더 큰 사이즈를 갖는 부 카운터를 불필요하게 할당할 필요가 없으므로, 각각의 노드의 애리티가 가능한한 높을 수 있지만, 메모리의 빈번하게 액세스된 영역들에 대해서는, 해당하는 노드들에게 애리티를 희생하지 않고 더 큰 카운터들이 주어질 수 있으므로, 빈번하게 데이터를 재암호화하거나 MAC들을 재계산해야 하는 비용이 많이 드는 성능상의 오버헤드를 줄일 수 있다. 주 트리의 루트 노드(402)에게 미러 트리(400) 내부의 미러 노드가 할당되면, 온칩 메모리 내부의 루트 무결성 검증 정보(89)가 미러 트리(400)의 루트 노드의 무결성을 검증하기 위한 정보를 더 지정한다. 주 트리의 루트 노드(402)가 미러 노드를 필요로 하지 않으면, 주 트리(26)의 부모 노드, 또는 부모 노드가 부 카운터들을 확장시킨 경우에는 이 부모 노드에 대응하는 미러 노드(404)에 지정된 정보에 근거하여, 미러 트리(400)의 임의의 노드가 그 자신의 무결성을 검증하게 할 수 있다.
도 12에 도시된 것과 같이, 일부 경우에, 복수 레벨들의 부 카운터 사이즈가 지원되므로, 주 트리의 지정된 노드에 대해 사이즈 증가 트리거 이벤트가 검출될 때마다, 부 카운터 사이즈가 메모리 보안 유닛(20)에 의해 지원된 다음의 가장 큰 사이즈로 증가될 수도 있다. 예를 들어, 도 12에는 지원되는 3가지 레벨이 존재하는데, 카운터 사이즈 필드들 0b00, 0b01 및 0b10은 각각 3비트, 6비트 또는 12비트의 카운터 사이즈를 나타낸다. 주 카운터 사이즈가 지원된 최소 카운터 사이즈의 2배보다 큰 주 트리의 노드들에 대해서는, 이 노드의 자식 노드들에 대한 모든 부 카운터들을 수용하기 위해 1개보다 많은 수의 미러 트리에 있는 추가적인 미러 노드들이 필요하다. 예를 들어, 도 12의 노드 N0_127에 대해, 사이즈 필드 값 0b10은 12비트 부 카운터들이 사용되는 것을 나타내므로, 128개의 3비트 부 카운터들에 대해 이전에 할당된 공간 내에 단지 32개의 12비트 부 카운터들이 끼워넣어진다. 이 때문에, 노드 N0_127의 자식 노드들에 대한 나머지 96개의 12비트 카운터들은 도 12에 도시된 것과 같이 3개의 추가적인 미러 트리들(400) 내부의 대응하는 노드들 N0_127', N0_127", N0_127"'에 걸쳐서 퍼진다. 이와 달리, 6비트 부 카운터들이 사용되는 도 12의 노드 N0에 대해서는, 단지 1개의 대응하는 노드 N0'이 제1 미러 트리(400)에 할당될 필요가 있고, 이것은 필요한 128개의 부 카운터들을 기억하는데 충분하므로, 미러 트리들 2 및 3에 있는 대응하는 노드들 N0", N0"'은 채워지지 않는다. 나중에 노드 N0에 대해 또 다른 사이즈 증가 트리거 이벤트가 발생하면, 부 카운터 사이즈가 12비트로 증분할 수 있으며, 이때 노드들 N0" 및 N0"'이 채워지게 된다. 각각의 추가적인 미러 카운터 무결성 트리는, 임의의 노드가 그것의 노드들이 채워지는 것을 처음으로 필요로 할 때 메모리 내부의 그것에 할당된 공간을 갖는다(예를 들어, 도 12의 미러 트리 2 및 3은 주 트리의 노드 N0_127에 대한 부 카운터 사이즈가 12비트로 증가하였을 때 할당되었다).
도 13에 도시된 것과 같이, 메모리 보안 유닛(20)은 메모리 내부에 주 트리(26)와 한 개 이상의 미러 트리들(400)에 대한 공간을 할당한다. 주 트리(26)에 대해, 트리의 각각의 노드(88)에는 주 트리 기준 어드레스(410)에 대한 대응하는 오프셋이 할당된다. 각각의 미러 트리(400)에 대해, 메모리 보안 유닛(20)은 주 트리(26)에 대해 할당된 것과 동일한 양의 공간을 할당하고, 미러 트리의 각각의 미러 노드(404)는 미러 트리 기준 어드레스(412)에 대해 주 트리(26)의 대응하는 주 노드(88)에 대해 사용된 오프셋과 동일한 오프셋에 배치된다. 예를 들어, 도 13에 나타낸 것과 같이, 주 트리 기준 어드레스(410)와 주 노드 N0_127의 어드레스 사이의 주 오프셋(414)은 미러 트리 기준 어드레스(412)와 대응하는 미러 노드 N0_127'의 어드레스 사이의 미러 트리 오프셋(416)과 같다. 미러 트리 오프셋(416)에 의해 지정된 오프셋에 위치한 실제 메모리 위치는 실제로는, 주 노드 N0_127의 카운터 사이즈를 확장시킬 필요성이 이미 식별되었는지 여부에 따라, 임의의 카운터들로 채워지지 않을 수도 있다. 이 때문에, 메모리 내부의 미러 트리(400)에 대해 할당된 공간은 성기게 채워지고, 이 공간의 일부 부분은 주어진 시간에 사용되지 않을 수 있다.
예를 들어, 무결성 트리에 의해 보호되는 보안 메모리의 1GB의 보호 영역을 갖는 시스템을 고려하면, 각각의 주 트리 노드에 있는 128개의 3비트 미러 카운터들을 사용할 때 이 보호 영역을 커버하는 노드들을 기억하기 위해 필요한 전체 메모리는 (도 10의 실시예에 나타낸 주 카운터의 사이즈, 사이즈 및 M 필드를 사용할 때, 물론 다른 사이즈도 가능하다) 대략 8MB이다. 이 때문에, 기준 트리의 사이즈는 대략 8MB이다. 부 카운터 사이즈의 모든 점프마다 동일한 사이즈(8MB)를 갖는 성기게 채워진 미러 서브 트리들을 구축한다. 따라서, 도 12에 나타낸 거소가 같이 3개의 추가적인 미러 트리가 구축되더라도, 전체 공간은 여전히 약 32MB이다. 비교용으로, 고정 사이즈 카운터를 사용하는 도 3의 접근방법은 대략 15MB의 발자국을 갖는 정적 카운터 트리를 구축할 것이다. 따라서, 도 10의 접근방법에서 추가적인 미러 트리들을 구축하는 것과 관련된 오버헤드가 훨씬 낮다. 메모리가 균등한 기록 빈도 분포로 기록되지 않을 때, 일부 영역들의 보호는 더 작은 부 카운터들로 수용될 수 있으며, 미러 트리들을 이용하여 노드 당 애리티를 희생할 필요가 없이 선택된 노드들에 대해 부 카운터 사이즈를 신장시킬 수 있다. 또한, 미러 트리들을 이용하는 가변의 미러 카운터 사이즈 접근방법은, 지원된 특정한 최대 부 카운터 사이즈에 대해 각각의 트리 노드의 애리티가 더 커질 수 있어(예를 들어, 32 대신에 128), 특정한 사이즈의 메모리의 영역을 보호하는데 필요한 노드들의 총 수를 줄이므로, 모든 노드가 결국 그들의 부 카운터 사이즈가 최대 사이즈로 증가되더라고, MAC들이나 주 카운터들을 기억하는데 더 적은 공간이 필요하다는 것을 의미한다. 이것은, 도 10에 도시된 트리의 모든 노드가 12비트 부 카운터들로 증가되고 모든 3개의 미러 트리들이 완전히 채워지도록 요구하더라도, 전체 공간이 여전히 도 3보다 낮다는 것을 의미한다.
주 트리(26)와 각각의 미러 트리(400)의 기준 어드레스들 410, 412는, 메모리 보안 유닛(20) 내부의 그것의 캐시(42) 내부나 전용 기준 어드레스 레지스터들 내부에 유지된다. 기준 어드레스 레지스터가 설치되는 경우, 각각의 미러 트리 기준 어드레스 레지스터는 대응하는 미러 트리가 아직 할당되지 않았을 때 무효한 값으로 설정된다(예를 들어, 무효한 값은 예를 들어 모두 0들이거나 모두 1들인 실제 미러 트리에 대해 할당이 허용되지 않은 소정의 기준 어드레스이거나, 레지스터와 관련된 별개의 유효한 비트가 어드레스가 유효한 기준 어드레스인지 여부를 표시할 수도 있다). 이와 같은 경우, 메모리 보안 유닛(20)은 특정한 미러 트리 기준 어드레스가 유효한지 아닌지로부터 트리 구조 전체에 걸쳐 사용된 미러 카운터의 최대 사이즈를 추론할 수도 있다. 예를 들어, 도 12의 미러 트리(2)와 관련된 기준 어드레스 레지스터가 무효로 표시되는 경우, 이것은, 트리 구조의 모든 노드에서 사용된 최대 부 카운터 사이즈가 6비트 이하라는 것을 나타낸다. 이것은 트리에서 사용된 최대 부 카운터 사이즈의 별개의 표시를 기억할 필요성을 없앨 수 있다.
또한, 메모리 보안 유닛(20)은 일부 실시예에서 어떤 노드들 및/또는 얼마나 많은 노드들이 특정한 미러 트리 내에 채워졌는지를 표시하는 추적 정보를 유지한다. 이것은, 메모리 보안 유닛(20)이, 주 트리(26)의 대응하는 노드가 필요할 때 필요한 미러 트리 노드를 추론적으로 로드할 것인지 아닌지에 대한 판정을 행할 수 있도록 할 수 있다. 즉, 메모리 보안 유닛(20)은, 주 트리 노드를 액세스하는 로드 요구를 발행시에, (i) 주 트리 노드가 반환되는 것을 대기한 후, 주 트리 노드의 사이즈 필드(402)에 근거하여 해당 부 카운터를 얻기 위해 대응하는 미러 트리 노드를 로드하는 것이 필요한지 요부를 판정할 것인지, 또는 (ii) 미러 트리 노드가 실제로 필요한지 여부를 판정하기 위해 주 트리 노드의 사이즈 필드(402)가 검사되는 것을 대기하지 않고 주 트리 노드 이외에 한 개 이상의 미러 트리 노드들을 로드할 것인지 결정할 필요가 있다. 옵션 (i)에 따르면, 미러 트리 노드가 실제로 필요하지 않을 때 불필요한 로드를 기동하는 것을 피함으로써 메모리 대역폭을 줄일 수 있다. 옵션 (ii)에 따르면, 미러 트리 노드가 필요한 경우에 지연을 피함으로써 성능을 향상시킬 수 있다. 옵션 (i) 또는 옵션 (ii)가 바람직한지는, 특정한 미러 트리에 대해 얼마나 많은 수의 유효한 노드들이 확립되었는지에 의존하는데, 미러 트리 내부의 유효한 노드들의 수가 많을수록, 현재의 액세스가 대응하는 미러 노드를 필요로 할 가능성이 더 커지므로, 미러 노드를 추론적으로 로딩하는 것으로부터 성능 향상을 얻을 수 있는 가능성이 더 커진다.
이 때문에, 일반적으로 주 카운터 무결성 트리의 특정한 노드를 액세스할 때, 메모리 보안 유닛(20)은, 주 트리의 특정한 노드가 실제로 메모리로부터 반환되기 전에 특정한 노드의 부 카운터 사이즈를 예측하고, 부 카운터 사이즈의 예측을 사용하여, 대응하는 주 트리 노드가 반환되기 전에 특정한 미러 트리 내부의 미러 트리 노드의 로드를 기동할 것인지 아닌지 판정할 수도 있다. 이와 같은 예측은, 특정한 미러 트리가 할당되었는지 여부 및/또는 얼마나 많은 유효 노드들이 특정한 미러 트리에 대해 확립되었는지를 나타내는 추적 정보에 근거할 수 있다. 추정 정보는 다양한 레벨의 정밀도로 유효 노드들의 수를 추적할 수도 있다. 예를 들어, 메모리 보안 유닛(20)은, 추적 정보 내에 어떤 특정한 노드들이 유효한지 지정하지 않고, 특정한 미러 트리의 얼마나 많은 수의 노드들이 유효한지 계수하는 유효 노드 카운터들을 유지할 수도 있다(예를 들어, 이와 같은 경우 이 트리에 대한 유효한 노드 카운터가 특정한 임계값보다 클 때 미러 트리 노드가 추론적으로 로드될 수도 있다). 이와 달리, 메모리 보안 유닛(20)은, 미러 트리의 어떤 특정한 노드들이 유효한지 아닌지는 비트맵을 유지할 수도 있으며, 이것은 특정한 미러 트리 노드가 필요한지 여부에 대한 정확한 판정을 허용할 수 있다. 어느 쪽이든, 미러 트리의 채워짐 레벨을 추적하는 것은 성능을 향상시키기 위한 로드 스케줄링에 대한 결정을 향상시키는데 도움이 될 수 있다.
도 9의 방법은 전술한 가변 부 카운터 사이즈 예를 구현하는 것으로 확장될 수 있다. 이와 같은 실시예에서는, 스텝 276에서 부 카운터가 오버플로우하면, 스텝 280으로 곧바로 진행하는 것 대신에, 추가적인 스텝을 행하여 부 카운터 사이즈가 이미 최대 부 카운터 사이즈인지 여부를 검사한다. 부 카운터 사이즈가 이미 메모리 보안 유닛(20)에 의해 지원된 최대 사이즈인 경우에, 스텝 280으로 방법이 진행하여, 타겟 블록과 관련된 주 카운터를 증분하고, 전술한 것과 같이 방법이 스텝 280을 벗어나 진행한다. 그러나, 미러 카운터 사이즈가 아직 지원된 최대 사이즈에 도달하지 않은 경우, 메모리 보안 유닛(20)은 오버플로우한 미러 카운터를 포함한 주 트리의 노드와 관련된 부 카운터들의 사이즈를 증가시킨다. 이 때문에, 주 노드와 미러 트리(400) 내부의 적어도 한 개의 대응하는 노드(404)가 재기록되어, (전술한 것과 같이, 주 카운터로부터 각각의 부 카운터로 한 개 이상의 비트들을 시프트하고 선두 제로값들로 주 카운터를 덧붙임으로써) 각각의 카운터의 비트 수가 확장되고, 확장된 부 카운터 값들을 주 노드 그 자체와 미러 트리들(400)의 한 개 이상의 대응하는 노드들(40) 내부의 부 카운터들을 위해 예약된 공간 중에 분배한다. 부 카운터들의 적절한 사이즈를 수용하는데 필요한 미러 트리(400)에 대해 공간이 아직 할당되지 않은 경우, 이때 메모리 보안 유닛(20)에 의해 공간이 할당될 수 있다. 그후, 도 9의 스텝 278로 방법이 진행하고, 도 9의 나머지 스텝들은 전술한 것과 같다.
도 10 내지 도 13의 실시예는, 트리의 각각의 레벨이 동일한 애리티(128)를 갖는 경우를 나타내지만, 이전의 실시예에서와 마찬가지로, 부모 노드가 32진이고 그것의 자식 노드가 64진인 예를 나타낸 도 14에 나타낸 것과 같이, 트리의 레벨들 사이에서 변동하는 애리티를 갖는 트리를 제공하는 것도 가능하다. 처음에는, 부모 노드가 32개의 12비트 부 카운터를 가지고 자식 노드가 64개의 6비트 부 카운터를 가졌을 것이지만, 사이즈 증가 트리거 이벤트에 따라, 64진 자식 노드의 부 카운터들의 사이즈가 12로 증가되었고, 추가적인 미러 노드가 할당되어 64진 자식 노드의 12비트 카운터들의 절반을 수용하였다. (64진 자식 노드의 카운터를 사용하여 계산된 MAC을 갖는) 암호화 카운터들의 후속 노드는 128진이다. eg 14는 각 노드에 대해 2의 거듭제곱 애리티를 나타내지만, 전술한 것과 같이 2의 정확한 거듭제곱이 아닌 애리티를 제공하는 것도 가능하다.
요약하면, 위에서 분할 카운터 설계를 사용하는 적어도 일부 레벨을 갖는, 분할 카운터를 사용하는 카운터 트리를 설명하였다. 이것은, 도 2 및 도 3의 비교예에서의 8진 트리(카운터 트리 또는 MAC-트리)와 달리, (선택된 분할-카운터 설계(16, 32, 64, 128 등)의 부:주 카운터 비율에 근거한) 16, 32, 64 또는 128진인 무결성 트리를 구성할 수 있게 한다. 이것은 메모리의 동일한 영역을 보호하기 위한 카운터-트리 내부의 레벨들의 수의 저감을 허용하여, 트리 횡단 중에 더 적은 메모리 트래픽과 그후의 성능 향상을 제공한다. 더구나, 카운터-캐시라인 당 더 큰 수의 부 카운터들은 더 양호한 캐시가능성을 제공하고, (캐시에서의 적중까지만 횡단이 계속되기 때문에) 트리 횡단 중에 메모리 액세스의 횟수를 줄인다.
본 발명은 각각의 레벨에서 다른 분할-카운터 설계를 갖는 가변-애리티 카운터 트리를 설명한다. 부모 노드 부 카운터 자식 노드 내부의 부 카운터들이 어느 것에 대한 기록시에 증분된다. 따라서, 트리에서 상승함에 따라, (캐싱의 효과를 무시하면) 기록-트래픽이 지수적으로 증가한다. 따라서, 본 발명은 각각의 레벨에서 덜 공격적인 분할-카운터 설계를 사용하여 트리에서 더 높이 상승함에 따라 트리의 애리티를 줄이는 것을 제안한다. 본 발명의 평가는, 분할-62 설계가 리프 레벨에서 상당한 오버플로우를 나타내는 반면에(MAC 재계산의 걸림>50%의 실행시간), 분할-32 설계는 무시할만한 오버플로우를 나타낸다(MAC-계산에 <1% 시간 소비). 따라서, 본 발명은 (주 카운터 당 48 부카운터를 갖는) 리프 레벨에서 분할-48을 갖는 설계를 제안하며, 트리의 다음 레벨에서 비율을 줄인다(주 카운터 당 36 부 카운터를 갖는 분할-36). 이것은 2의 거듭제곱이 아닌 애리티를 발생하며 어드레스 산술 계산을 복잡하게 하지만, MAC 오버헤드의 재계산이 없이, 추가적인 성능 이득을 이용하기 위해 지불해야 하는 비용이 합당하다.
본 발명은, 특정한 노드들에 대해 확대된 카운터들을 수용하기 위해 미러 트리를 이용하는 가변 부 카운터 사이즈를 갖는 트리를 제안하는데, 이것은 (증가된 애리티와 트리 횡단을 가능하게 하기 위해) 부 카운터 사이즈의 감소와, (부 카운터가 오버플로우할 때 필요한 재암호화 또는 MAC 재계산의 가능성을 줄이기 위해) 부 카운터 사이즈의 증가의 경쟁하는 요구를 조화시키는데 도움이 된다. 미러 트리 접근방법에 따르면, 더 큰 카운터들을 필요로 하는 노드들이 더 큰 카운터를 사용할 수 있지만, 덜 빈번하게 필요한 다른 노드들이 더 적은 부 카운터들을 여전히 사용할 수 있다. 필요한 경우에는, 가변 부 카운터 접근방법을 전술한 가변 애리티 트리와 조합하거나, 트리 전체에 걸쳐 애리티가 동일한 경우에는 고정 애리티 버전을 사용할 수 있다.
도 15는 다양한 분할-카운터 기반의 카운터 트리들의 성능 평가를 나타낸 것이다:
· 4개의 바의 각 세트 중 좌측 바: 모노리식 56비트 카운터를 갖는 비교 접근방법(Mono-8)
· 4개의 바의 각 세트의 좌측에서 두 번째 바: Split-16(16진)
· 4개의 바의 각 세트의 좌측에서 세 번째 바: Split-32(32진)
· 4개의 바의 각 세트 중 우측 바: Split-64(64진).
성능 가속(speedup)을 각각의 벤치마크용의 Mono-8에 대한 비율로 나타내었는데, 즉 Mono-8에 대한 가속 비율은 항상 1이다. 온칩에서 암호화 및 무결성 트리 카운터를 캐시하는 32KB 전용 카운터 캐시를 가정한다. 본 발명은 SPEC2006(1000 명령 당 >1 메모리 액세스)에서의 메모리 집중 워크로드에서 이들 구성의 성능을 평가한다. 도 10에 나타낸 것과 같이, Split-32(32진) 트리는 평균적으로 모노리식 카운터(56비트) 트리(8진)에 비해 42%의 가속을 나타낸다. Split-16 카운터 트리는 평균적으로 더 작은 26%의 가속을 나타낸다. 이것은 메모리 트래픽의 감소를 발생하는 분할-카운터 트리 노드들의 향상된 캐시가능성에 주로 기인한 것이다. Split-64는 Split-32(평균적으로 42%)에 비해 상당한 가속(평균적으로 57%)을 나타낸다. 그러나, Split-64는, 성능 모델에서는 설명하지 않는, 오버플로우로 인한 상당한 비용을 발생한다(MAC-재계산을 처리시 시간의 >50%를 소비). 그 결과, Split-32가 정적인 애리티, 즉 레벨들을 가로질러 카운터들에 대한 동일한 설계를 갖는 카운터-트리에 대한 더 바람직한 보수적인 설계이다. 그러나, Split-32와 Split-64 사이의 성능 차이와, Split-64에서는 상당한 오버플로우가 존재하지만 Split-32에서는 무시할 수 있다는 사실을 고려하면, 도 5에 도시된 것과 같이 절충적인 가변의 2의 거듭제곱이 아닌 애리티의 분할-카운터 트리를 찾을 수 있다.
도 16은 사용될 수 있는 시뮬레이터 구현예를 나타낸 것이다. 전술한 실시예는 해당 기술을 지원하는 특정한 처리 하드웨어를 작동하기 위한 장치 및 방법에 관해 본 발명을 구현하지만, 컴퓨터 프로그램의 사용을 통해 구현되는 본 발명에서 설명한 실시예에 따라 명령 실행 환경을 제공하는 것도 가능하다. 이와 같은 컴퓨터 프로그램은, 하드웨어 아키텍처의 소프트웨어 기반의 구현을 제공하는 한, 시뮬레이터로 부르는 경우가 많다. 다양한 시뮬레이터 컴퓨터 프로그램은 에뮬레이터, 가상머신, 모델, 및 동적 이진 변환기를 포함하는 이진 변환기를 포함한다. 보통, 시뮬레이터 구현은, 옵션으로 시뮬레이터 프로그램(310)을 지원하는 호스트 운영체계(320)를 실행하는 호스트 프로세서(330) 상에서 실행된다. 일부 구성에서는, 하드웨어와 제공된 명령 실행 환경 사이에 복수 층의 시뮬레이션이 존재하고, 및/또는 동일한 호스트 프로세서 상에서 복수의 별개의 명령 실행 환경이 제공된다. 역사적으로, 합당한 속도에서 실행되는 시뮬레이터 구현을 제공하기 위해 강력한 프로세서들이 요구되었지만, 이와 같은 접근방법은, 호환성이나 재사용 이유로 인해 다른 프로세서에 대해 네이티브한 코드를 실행하려는 요구가 있을 때 등과 같은, 특정한 상황에서 정당화된다. 예를 들어, 시뮬레이터 구현은, 호스트 프로세서 하드웨어에 의해 지원되지 않는 추가적인 기능을 갖는 명령 실행 환경을 제공하거나, 보통 다양한 하드웨어 아키텍처와 관련된 명령 실행 환경을 제공한다. 시뮬레이션s의 개관에 대해서는 "Some Efficient Architecture Simulation Techniques", Robert Bedichek, Winter 1990 USENIX Conference, Pages 53-63에 기재되어 있다.
본 실시예를 특정한 하드웨어 구성 또는 특징을 참조하여 설명하였지만, 시뮬레이션된 실시예에서는, 적절한 소프트웨어 구성 또는 특징에 의해 동등한 기능이 제공된다. 예를 들어, 특정한 회로가 시뮬레이션된 실시예에서는 컴퓨터 프로그램 논리로 구현된다. 마찬가지로, 레지스터 또는 캐시 등의 메모리 하드웨어도 시뮬레이션된 실시예에서는 소프트웨어 데이터 구조로 구현된다. 전술한 실시예에서 참조한 한 개 이상의 하드웨어 구성요소들이 호스트 하드웨어(예를 들어, 호스트 프로세서(330) 상에 존재하는 구성에서는, 적절한 경우에, 일부 시뮬레이션된 실시예가 호스트 하드웨어를 이용한다.
시뮬레이터 프로그램(310)은, 컴퓨터 판독가능한 기억매체(이것은 비일시적인 매체일 수도 있다)에 기억되고, 시뮬레이터 프로그램(310)에 의해 모델링되고 있는 하드웨어 아키텍처의 응용 프로그램 인터페이스와 동일한 타겟 코드(300)에 대한 프로그램 인터페이스(명령 실행 환경)를 제공한다. 따라서, 전술한 오프칩 메모리(14)에 데이터를 판독 또는 기록하는 명령을 포함하는 타겟 코드(300)의 프로그램 명령은 시뮬레이터 프로그램(310)을 사용하는 명령 실행 환경 내에서 실행됨으로써, 전술한 것과 같이 하드웨어로 제공된 메모리 보안 유닛(20)을 실제로 갖지 않는 호스트 컴퓨터(330)가 이들 특징을 에뮬리에션할 수 있다.
또 다른 예시적인 구성은 다음과 같은 절(clause)에 주어진다:
(1) 메모리에 기억된 데이터에 대한 액세스를 제어하는 메모리 액세스회로와,
메모리의 보호 메모리 영역에 기억된 데이터의 무결성을 검증하는 메모리 보안회로를 구비하고,
상기 메모리 보안회로는 복수의 노드들을 포함하는 카운터 무결성 트리를 유지하도록 구성되고, 각각의 노드는 상기 보호 메모리 영역의 각각의 데이터 블록들과 관련된 복수의 카운터들을 지정하고, 복수의 노드들은, 카운터들 중에서 적어도 한 개가 상기 카운터 무결성 트리의 추가적인 카운터들을 제공하는 자식 노드를 기억하는 데이터 블록과 관련되는 적어도 한 개의 부모 노드와, 카운터들 중에서 적어도 한 개가 상기 카운터 무결성 트리 이외의 데이터를 기억하는 데이터 블록과 관련되는 적어도 한 개의 리프 노드를 포함하고,
상기 보호 메모리 영역의 타겟 데이터 블록에 대한 액세스에 응답하여, 상기 메모리 보안회로는, 타겟 데이터 블록과 관련된 기억된 인증 코드를, 타겟 데이터 블록과 이 타겟 데이터 블록과 관련되는 카운터 무결성 트리의 타겟 카운터에 근거하여 발생된 산출된 인증 코드와 비교함으로써 타겟 데이터 블록의 무결성을 검증하도록 구성되고,
상기 카운터 무결성 트리의 노드들 중에서 적어도 한 개는, 적어도 2개의 카운터들 사이에서 공유되는 주 카운트 값과 적어도 2개의 카운터들 각각에 대해 별개로 지정된 각각의 부 카운트 값의 조합으로서 각각 정의되는 적어도 2개의 카운터들을 지정하는 분할-카운터 노드를 포함하는 장치.
(2) 절 (1)에 따른 장치로서, 제2 메모리를 구비하고,
상기 메모리 보안회로는,
카운터 무결성 트리의 루트 노드, 또는
보호 메모리 영역에 기억된 카운터 무결성 트리의 루트 노드의 무결성을 검증하는 정보를
지정하는 루트 검증 데이터를 제2 메모리에 기억하도록 구성된 장치.
(3) 절 (2)에 따른 장치로서, 타겟 데이터 블록에 대한 액세스에 응답하여, 메모리 보안회로는, 1회 이상의 검증 검사들을 행하여 타겟 카운터와 루트 노드를 포함하는 카운터 무결성 트리의 분기 상에서 카운터들의 무결성을 검증하도록 구성되고, 검증 검사들 중에서 적어도 한 개는 제2 메모리에 기억된 루트 검증 데이터에 의존하는 장치.
(4) 절 (1)에 따른 장치로서, 보호 메모리 영역의 타겟 데이터 블록의 갱신에 응답하여, 메모리 보안회로는, 타겟 카운터를 갱신하고, 타겟 데이터 블록의 갱신된 데이터와 갱신된 타겟 카운터에 근거하여 타겟 데이터 블록과 관련된 기억된 인증 코드를 재계산하도록 구성된 장치.
(5) 절 (4)에 따른 장치로서, 메모리 보안회로는 타겟 카운터를 증분함으로써 타겟 카운터를 갱신하도록 구성된 장치.
(6) 절 (1)에 따른 장치로서, 타겟 데이터 블록에 대한 타겟 카운터가 카운터 무결성 트리의 분할-카운터 노드에 의해 지정될 때 보호 메모리 영역의 타겟 데이터 블록의 갱신에 응답하여, 메모리 보안회로는, 타겟 카운터에 대응하는 부 카운트 값을 갱신하고, 타겟 데이터 블록의 갱신된 데이터, 타겟 카운터에 대응하는 해당하는 주 카운트 값과, 타겟 카운터에 대응하는 갱신된 부 카운트 값에 근거하여 타겟 데이터 블록과 관련된 기억된 인증 코드를 재계산하도록 구성된 장치.
(7) 절 (6)에 따른 장치로서, 부 카운트 값의 갱신이 오버플로우 상태를 일으킬 때, 메모리 보안회로는, 대응하는 주 카운트 값을 갱신하고, 대응하는 주 카운트 값을 공유하는 카운터들과 관련된 데이터 블록들 각각과 관련된 기억된 인증 코드를 재계산하도록 구성된 장치.
(8) 절 (1)에 따른 장치로서, 상기 적어도 한 개의 부모 노드 중에서 적어도 한 개는 분할-카운터 노드인 장치.
(9) 절 (1)에 따른 장치로서, 카운터 무결성 트리는 카운터 무결성 트리의 다양한 레벨들에 있는 적어도 2개의 분할-카운터 노드들을 포함하는 장치.
(10) 절 (1)에 따른 장치로서, 카운터 무결성 트리는 다양한 수의 데이터 블록들에 대한 카운터들을 지정하는 적어도 2개의 노드를 포함하는 장치.
(11) 절 (1)에 따른 장치로서, 카운터 무결성 트리는, 제1 수의 데이터 블록들에 대한 카운터들을 지정하는 제1 분할-카운터 노드와, 제1 수보다 큰 제2 수의 데이터 블록들에 대한 카운터들을 지정하는 제2 분할-카운터 노드를 포함하고, 상기 제1 분할-카운터 노드는 상기 제2 분할-카운터 노드의 부모 노드인 장치.
(12) 절 (11)에 따른 장치로서, 상기 제1 분할-카운터 노드에 의해 지정된 부 카운트 값들은 상기 제2 분할-카운터 노드에 의해 지정된 부 카운트 값들보다 더 큰 수의 비트를 갖는 장치.
(13) 절 (11)에 따른 장치로서, 성가 제1 분할-카운터 노드의 부모 노드는 제1 수보다 작은 제3 수의 데이터 블록들에 대한 카운터들을 지정하는 분할-카운터 노드이다.
(14) 절 (1)에 따른 장치로서, 카운터 무결성 트리의 적어도 한 개의 노드는 2의 정확한 거듭제곱 이외의 수의 데이터 블록들에 대한 카운터들을 지정하는 장치.
(15) 절 (1)에 따른 장치로서, 메모리 보안 회로는 타겟 데이터 블록과 동일한 캐시 라인으로부터 타겟 데이터 블록에 대한 기억된 인증 코드를 판독하도록 구성된 장치.
(16) 절 (1)에 따른 장치로서, 타겟 데이터 블록에 대한 액세스에 응답하여, 메모리 보안회로는, 기억된 인증 코드와 산출된 인증 코드 사이에 불일치가 검출될 때, 보안 위반 응답을 기동하도록 구성된 장치.
(17) 절 (1)에 따른 장치로서, 메모리 보안회로는, 보호 메모리 영역의 데이터 블록에 기록된 데이터를 암호화하고 보호 메모리 영역의 데이터 블록으로부터 판독된 데이터를 복호화하는 암호화/복호화 회로를 구비한 장치.
(18) 절 (1)에 따른 장치로서, 메모리 보안회로는 카운터 무결성 트리에 무관한 메모리의 비보호 메모리 영역에 대한 액세스를 제어하도록 구성된 장치.
(19) 메모리의 보호 메모리 영역에 기억된 데이터에 대한 액세스를 제어하는 방법으로서,
상기 보호 메모리 영역의 각각의 데이터 블록들과 관련된 복수의 카운터들을 각각 지정하고, 카운터들 중에서 적어도 한 개가 카운터 무결성 트리의 추가적인 카운터들을 제공하는 자식 노드를 기억하는 데이터 블록과 관련되는 적어도 한 개의 부모 노드와, 카운터들 중에서 적어도 한 개가 상기 카운터 무결성 트리 이외의 데이터를 기억하는 데이터 블록과 관련되는 적어도 한 개의 리프 노드를 포함하는 복수의 노드들을 포함하는 상기 카운터 무결성 트리를 유지하는 단계와,
상기 보호 메모리 영역의 타겟 데이터 블록에 대한 액세스에 응답하여, 타겟 데이터 블록과 관련된 기억된 인증 코드를, 타겟 데이터 블록과 이 타겟 데이터 블록과 관련되는 상기 카운터 무결성 트리의 타겟 카운터에 근거하여 발생된 산출된 인증 코드와 비교함으로써 타겟 데이터 블록의 무결성을 검증하는 단계를 포함하고,
상기 카운터 무결성 트리의 노드들 중에서 적어도 한 개는, 적어도 2개의 카운터들 사이에서 공유되는 주 카운트 값과 적어도 2개의 카운터들 각각에 대해 별개로 지정된 각각의 부 카운트 값의 조합으로서 각각 정의되는 적어도 2개의 카운터들을 지정하는 분할-카운터 노드를 포함하는 제어방법.
(20) 데이터 처리장치가 절 (19)에 기재된 방법을 행하도록 제어하는 컴퓨터 프로그램을 기억하는 비일시적인 기억매체.
(21) 명령 실행 환경을 제공하도록 호스트 데이터 처리장치를 제어하는 컴퓨터 프로그램으로서,
메모리에 기억된 데이터에 대한 액세스를 제어하는 메모리 액세스 프로그램 로직과,
메모리의 보호 메모리 영역에 기억된 데이터의 무결성을 검증하는 메모리 보안 프로그램 로직을 포함하고,
상기 메모리 보안 프로그램 로직은 복수의 노드들을 포함하는 카운터 무결성 트리를 유지하도록 구성되고, 각각의 노드는 상기 보호 메모리 영역의 각각의 데이터 블록들과 관련된 복수의 카운터들을 지정하고, 복수의 노드들은, 카운터들 중에서 적어도 한 개가 상기 카운터 무결성 트리의 추가적인 카운터들을 제공하는 자식 노드를 기억하는 데이터 블록과 관련되는 적어도 한 개의 부모 노드와, 카운터들 중에서 적어도 한 개가 상기 카운터 무결성 트리 이외의 데이터를 기억하는 데이터 블록과 관련되는 적어도 한 개의 리프 노드를 포함하고,
상기 보호 메모리 영역의 타겟 데이터 블록에 대한 액세스에 응답하여, 상기 메모리 보안 프로그램 로직은, 타겟 데이터 블록과 관련된 기억된 인증 코드를, 타겟 데이터 블록과 이 타겟 데이터 블록과 관련되는 카운터 무결성 트리의 타겟 카운터에 근거하여 발생된 산출된 인증 코드와 비교함으로써 타겟 데이터 블록의 무결성을 검증하도록 구성되고,
상기 카운터 무결성 트리의 노드들 중에서 적어도 한 개는, 적어도 2개의 카운터들 사이에서 공유되는 주 카운트 값과 적어도 2개의 카운터들 각각에 대해 별개로 지정된 각각의 부 카운트 값의 조합으로서 각각 정의되는 적어도 2개의 카운터들을 지정하는 분할-카운터 노드를 포함하는 프로그램.
본 발명에서, 단어 "하도록 구성된"은 장치의 구성요소가 정의된 동작을 행할 수 있는 구성을 갖는다는 것을 의미하기 위해 사용된다. 이와 관련하여, "구성"은 하드웨어 또는 소프트웨어의 배치 또는 상호접속 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 갖거나, 프로세서 또는 기타의 처리장치가 기능을 행하도록 프로그래밍되어도 된다. "하도록 구성된"은 이 장치의 구성요소가 정의된 동작을 제공하기 위해 어떤 식으로 변경될 필요가 있는 것을 시사하는 것은 아니다.
첨부도면을 참조하여 본 발명의 예시적인 실시예들을 상세히 설명하였지만, 본 발명은 이들 실시예에 한정되지 않으며, 첨부된 청구범위의 보호범위 및 사상을 벗어나지 않으면서 본 발명이 속한 기술분야의 당업자에 의해 다양한 변경, 부가 및 변화가 행해질 수 있다는 것은 자명하다. 예를 들면, 종속항들의 특징들의 다양한 조합이 독립항들의 특징과 행해질 수도 있다.

Claims (20)

  1. 메모리에 기억된 데이터에 대한 액세스를 제어하는 메모리 액세스회로와,
    메모리의 보호 메모리 영역에 기억된 데이터의 무결성을 검증하는 메모리 보안회로를 구비하고,
    상기 메모리 보안회로는 복수의 노드들을 포함하는 주 카운터 무결성 트리를 유지하도록 구성되고, 각각의 노드는 상기 보호 메모리 영역의 각각의 데이터 블록들과 관련된 복수의 카운터들을 지정하고, 복수의 노드들은, 카운터들 중에서 적어도 한 개가 상기 주 카운터 무결성 트리의 추가적인 카운터들을 제공하는 자식 노드를 기억하는 데이터 블록과 관련되는 적어도 한 개의 부모 노드와, 카운터들 중에서 적어도 한 개가 상기 주 카운터 무결성 트리 이외의 데이터를 기억하는 데이터 블록과 관련되는 적어도 한 개의 리프 노드를 포함하고,
    상기 보호 메모리 영역의 타겟 데이터 블록에 대한 액세스에 응답하여, 상기 메모리 보안회로는, 상기 타겟 데이터 블록과 관련된 기억된 인증 코드를, 상기 타겟 데이터 블록과 상기 타겟 데이터 블록과 관련되는 상기 주 카운터 무결성 트리의 타겟 카운터에 근거하여 산출되는, 산출된 인증 코드와 비교함으로써 상기 타겟 데이터 블록의 무결성을 검증하도록 구성되고,
    상기 주 카운터 무결성 트리의 노드들 중에서 적어도 한 개는, 적어도 2개의 카운터들 사이에서 공유되는 주 카운트 값과 적어도 2개의 카운터들 각각에 대해 별개로 지정된 각각의 부 카운트 값의 조합으로서 각각 정의되는 적어도 2개의 카운터들을 지정하는 분할-카운터 노드를 포함하고,
    상기 주 카운터 무결성 트리의 특정한 분할-카운터 노드와 관련된 사이즈 증가 트리거 이벤트에 응답하여, 상기 메모리 보안회로는, 상기 특정한 분할-카운터 노드의 부 카운터들의 사이즈를 증가시키고, 상기 특정한 분할-카운터 노드의 부 카운터들의 서브셋을 적어도 한 개의 미러 카운터 무결성 트리의 대응하는 분할-카운터 노드에 할당하도록 구성된 장치.
  2. 제 1항에 있어서,
    상기 특정한 분할-카운터 노드는 상기 특정한 분할-카운터 노드의 부 카운터들의 사이즈를 나타내는 사이즈 필드를 지정하는 장치.
  3. 제 1항에 있어서,
    상기 특정한 분할-카운터 노드의 부 카운터들이 상기 메모리 보안회로에 의해 지원되는 최대 사이즈 이외의 사이즈를 가질 때 상기 사이즈 증가 트리거 이벤트에 응답하여, 상기 메모리 보안회로는 상기 특정한 분할-카운터 노드의 부 카운터들의 사이즈를 상기 메모리 보안회로에 의해 지원되는 복수의 부 카운터 사이즈들 중에서 현재의 사이즈보다 큰 사이즈들중 가장 작은 사이즈로 증가시키도록 구성된 장치.
  4. 제 1항에 있어서,
    부 카운터들의 사이즈가 상기 메모리 보안회로에 의해 지원되는 최소의 부 카운터 사이즈의 2배보다 크게 되는 분할 카운터 노드들에 대해, 상기 메모리 보안회로는 대응하는 분할-카운터 노드들을 적어도 2개의 미러 카운터 무결성 트리들에 할당하도록 구성된 장치.
  5. 제 1항에 있어서,
    상기 적어도 한 개의 미러 카운터 무결성 트리에 대해 메모리 공간이 아직 할당되지 않았을 때 상기 사이즈 증가 트리거 이벤트에 응답하여, 상기 메모리 보안회로는 상기 적어도 한 개의 미러 카운터 무결성 트리에 대한 메모리 공간을 할당하도록 구성된 장치.
  6. 제 1항에 있어서,
    각각의 미러 카운터 무결성 트리에 대해, 상기 메모리 보안회로는 상기 주 카운터 무결성 트리에 대해 할당된 메모리 공간의 양과 동일한 양의 메모리 공간을 할당하도록 구성된 장치.
  7. 제 1항에 있어서,
    특정한 미러 카운터 무결성 트리의 대응하는 분할-카운터 노드의 어드레스와 상기 특정한 미러 카운터 무결성 트리의 기준 어드레스 사이의 제1 오프셋은 상기 주 카운터 무결성 트리의 상기 특정한 분할-카운터 노드의 어드레스와 상기 주 카운터 무결성 트리의 기준 어드레스 사이의 제2 오프셋과 같은 장치.
  8. 제 1항에 있어서,
    상기 사이즈 증가 트리거 이벤트는,
    상기 특정한 분할-카운터 노드의 부 카운터들 중에서 한 개의 부 카운터 오버플로우와,
    상기 특정한 분할-카운터 노드의 부 카운터들의 오버플로우들의 레이트(rate) - 상기 부 카운터들의 오버플로우들의 레이트는 미리 결정된 조건을 만족한다 - 와,
    임계값을 초과하는 상기 특정한 분할-카운터 노드와 관련된 데이터 블록들에 대한 인증 코드 재계산 또는 데이터 재암호화 이벤트들의 레이트
    중에서 적어도 한 개를 포함하는 장치.
  9. 제 1항에 있어서,
    상기 사이즈 증가 트리거 이벤트는, 보호 영역의 관련된 서브셋과 관련된 메모리 트래픽의 레벨이 임계값보다 큰 것을 검출하는 것을 포함하고, 상기 보호 영역의 상기 관련된 서브셋은, 상기 관련된 서브셋 내부의 임의의 타겟 블록의 무결성 검증이 상기 특정한 분할-카운터 노드에 의존하는 상기 보호 영역의 일부를 포함하는 장치.
  10. 제 1항에 있어서,
    제2 메모리를 구비하고,
    상기 메모리 보안회로는,
    상기 주 카운터 무결성 트리의 루트 노드, 또는
    상기 보호 메모리 영역에 기억된 상기 주 카운터 무결성 트리의 상기 루트 노드의 무결성을 검증하기 위한 정보를
    지정하는 루트 검증 데이터를 상기 제2 메모리에 기억하도록 구성된 장치.
  11. 제 10항에 있어서,
    상기 타겟 데이터 블록에 대한 액세스에 응답하여, 상기 메모리 보안회로는 1회 이상의 검증 검사들을 행하여 상기 타겟 카운터와 상기 루트 노드를 포함하는 상기 주 카운터 무결성 트리의 분기 상의 카운터들의 무결성을 검증하도록 구성되고, 상기 검증 검사들 중에서 적어도 한 개는 상기 제2 메모리에 기억된 상기 루트 검증 데이터에 의존하는 장치.
  12. 제 1항에 있어서,
    상기 주 카운터 무결성 트리의 특정한 노드를 액세스할 때, 상기 메모리 보안회로는, 상기 주 카운터 무결성 트리의 상기 특정한 노드를 이용하기 전에, 상기 주 카운터 무결성 트리의 상기 특정한 노드와 관련된 부 카운터 사이즈를 예측하도록 구성된 장치.
  13. 제 12항에 있어서,
    상기 메모리 보안회로는, 예측된 상기 부 카운터 사이즈에 따라 미러 카운터 무결성 트리의 대응하는 노드를 액세스하는 요구를 기동할 것인지 여부를 판정하도록 구성된 장치.
  14. 제 1항에 있어서,
    상기 타겟 데이터 블록에 대한 상기 타겟 카운터가 상기 주 카운터 무결성 트리의 분할-카운터 노드에 의해 지정될 때 상기 보호 메모리 영역의 상기 타겟 데이터 블록의 갱신에 응답하여, 상기 메모리 보안회로는, 상기 타겟 카운터에 대응하는 부 카운트 값을 갱신하고, 상기 타겟 데이터 블록의 갱신된 데이터, 상기 타겟 카운터에 대응하는 해당하는 주 카운트 값과, 상기 타겟 카운터에 대응하는 갱신된 부 카운트 값에 근거하여 상기 타겟 데이터 블록과 관련된 상기 기억된 인증 코드를 재계산하도록 구성된 장치.
  15. 제 1항에 있어서,
    상기 주 카운터 무결성 트리는 서로 다른 애리티를 갖는 적어도 2개의 노드를 포함하고,
    상기 애리티는 부모 노드 당 설치되는 자식 노드들의 수를 말하는 장치.
  16. 제 1항에 있어서,
    상기 주 카운터 무결성 트리의 적어도 한 개의 노드는 2의 정확한 거듭제곱 이외의 데이터 블록들의 수에 대해 카운터들을 지정하는 장치.
  17. 제 1항에 있어서,
    상기 메모리 보안회로는, 상기 타겟 데이터 블록과 동일한 캐시 라인으로부터 상기 타겟 데이터 블록에 대한 상기 기억된 인증 코드를 판독하도록 구성된 장치.
  18. 제 1항에 있어서,
    상기 메모리 액세스회로는, 상기 주 카운터 무결성 트리에 무관한 메모리의 비보호 메모리 영역에 대한 액세스를 제어하도록 구성된 장치.
  19. 메모리의 보호 메모리 영역에 기억된 데이터에 대한 액세스를 제어하는 방법으로서,
    상기 보호 메모리 영역의 각각의 데이터 블록들과 관련된 복수의 카운터들을 각각 지정하고, 카운터들 중에서 적어도 한 개가 주 카운터 무결성 트리의 추가적인 카운터들을 제공하는 자식 노드를 기억하는 데이터 블록과 관련되는 적어도 한 개의 부모 노드와, 카운터들 중에서 적어도 한 개가 상기 주 카운터 무결성 트리 이외의 데이터를 기억하는 데이터 블록과 관련되는 적어도 한 개의 리프 노드를 포함하는 복수의 노드들을 포함하는 상기 주 카운터 무결성 트리를 유지하는 단계와,
    상기 보호 메모리 영역의 타겟 데이터 블록에 대한 액세스에 응답하여, 상기 타겟 데이터 블록과 관련된 기억된 인증 코드를, 상기 타겟 데이터 블록과 상기 타겟 데이터 블록과 관련되는 상기 주 카운터 무결성 트리의 타겟 카운터에 근거하여 산출되는, 산출된 인증 코드와 비교함으로써 상기 타겟 데이터 블록의 무결성을 검증하는 단계를 포함하고,
    상기 주 카운터 무결성 트리의 노드들 중에서 적어도 한 개는, 적어도 2개의 카운터들 사이에서 공유되는 주 카운트 값과 적어도 2개의 카운터들 각각에 대해 별개로 지정된 각각의 부 카운트 값의 조합으로서 각각 정의되는 적어도 2개의 카운터들을 지정하는 분할-카운터 노드를 포함하고,
    상기 제어방법은,
    상기 주 카운터 무결성 트리의 특정한 분할-카운터 노드와 관련된 사이즈 증가 트리거 이벤트에 응답하여, 상기 특정한 분할-카운터 노드의 부 카운터들의 사이즈를 증가시키고, 상기 특정한 분할-카운터 노드의 부 카운터들의 서브셋을 적어도 한 개의 미러 카운터 무결성 트리의 대응하는 분할-카운터 노드에 할당하는 단계를 더 포함하는 제어방법.
  20. 청구항 19에 기재된 방법을 행하도록 데이터 처리장치를 제어하는 컴퓨터 프로그램을 기억하는 비일시적인 기억매체.
KR1020207004945A 2017-08-03 2018-07-25 메모리 보안용 카운터 무결성 트리 KR102532395B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/668,322 2017-08-03
US15/668,322 US10540297B2 (en) 2017-08-03 2017-08-03 Memory organization for security and reliability
US15/892,770 US10733313B2 (en) 2018-02-09 2018-02-09 Counter integrity tree for memory security
US15/892,770 2018-02-09
PCT/GB2018/052094 WO2019025762A1 (en) 2017-08-03 2018-07-25 COUNTER INTEGRITY TREE FOR MEMORY SECURITY

Publications (2)

Publication Number Publication Date
KR20200031671A KR20200031671A (ko) 2020-03-24
KR102532395B1 true KR102532395B1 (ko) 2023-05-15

Family

ID=63143270

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207004945A KR102532395B1 (ko) 2017-08-03 2018-07-25 메모리 보안용 카운터 무결성 트리

Country Status (6)

Country Link
EP (1) EP3662404B1 (ko)
JP (1) JP7096323B2 (ko)
KR (1) KR102532395B1 (ko)
CN (1) CN110945509B (ko)
IL (1) IL271729B2 (ko)
WO (1) WO2019025762A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110321715A (zh) * 2019-07-08 2019-10-11 北京可信华泰信息技术有限公司 可信度量方法、装置及处理器
GB2596585B (en) * 2020-07-03 2022-09-07 Advanced Risc Mach Ltd Integrity tree for memory security
WO2022006880A1 (zh) * 2020-07-10 2022-01-13 华为技术有限公司 数据处理方法、设备与存储介质
CN116171443A (zh) * 2020-09-30 2023-05-26 华为技术有限公司 资源分配装置、装置与存储介质
US20220198283A1 (en) * 2020-12-22 2022-06-23 Paypal, Inc. Dynamic reconstruction of decision tree structures
CN112597488B (zh) * 2020-12-30 2022-12-06 海光信息技术股份有限公司 页表完整性保护方法、装置和设备
CN112651054B (zh) * 2020-12-30 2022-10-14 海光信息技术股份有限公司 一种内存数据完整性保护方法、装置及电子设备
CN113553126B (zh) * 2021-07-06 2024-03-22 网易(杭州)网络有限公司 数据的处理方法和装置
CN113486399B (zh) * 2021-07-14 2023-03-24 上海瓶钵信息科技有限公司 基于risc-v架构的数据存储方法及系统
GB2622066A (en) * 2022-09-01 2024-03-06 Advanced Risc Mach Ltd Counter tree
GB2622065A (en) * 2022-09-01 2024-03-06 Advanced Risc Mach Ltd Counter integrity tree

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090019551A1 (en) 2007-06-25 2009-01-15 Tomoyuki Haga Information security device and counter control method
US20100212017A1 (en) 2009-02-18 2010-08-19 International Business Machines Corporation System and method for efficient trust preservation in data stores
US20150317256A1 (en) 2009-06-26 2015-11-05 International Business Machines Corporation Secure object having protected region, integrity tree, and unprotected region
WO2017058408A2 (en) 2015-09-25 2017-04-06 Intel Corporation Protect non-memory encryption engine (non-mee) metadata in trusted execution environment

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2543215A2 (en) * 2010-03-05 2013-01-09 InterDigital Patent Holdings, Inc. Method and apparatus for providing security to devices
CN105515776A (zh) * 2010-03-05 2016-04-20 交互数字专利控股公司 给设备提供安全性的方法和装置
JP5159849B2 (ja) * 2010-09-24 2013-03-13 株式会社東芝 メモリ管理装置及びメモリ管理方法
ES2647115T3 (es) * 2014-06-12 2017-12-19 Nagravision S.A. Sistema y método para la carga de datos segura en una memoria caché
CN105069379B (zh) * 2015-07-29 2017-11-21 哈尔滨工程大学 一种基于写计数器的存储器完整性保护方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090019551A1 (en) 2007-06-25 2009-01-15 Tomoyuki Haga Information security device and counter control method
US20100212017A1 (en) 2009-02-18 2010-08-19 International Business Machines Corporation System and method for efficient trust preservation in data stores
US20150317256A1 (en) 2009-06-26 2015-11-05 International Business Machines Corporation Secure object having protected region, integrity tree, and unprotected region
WO2017058408A2 (en) 2015-09-25 2017-04-06 Intel Corporation Protect non-memory encryption engine (non-mee) metadata in trusted execution environment

Also Published As

Publication number Publication date
JP7096323B2 (ja) 2022-07-05
IL271729A (en) 2020-02-27
IL271729B2 (en) 2023-08-01
EP3662404A1 (en) 2020-06-10
JP2020529657A (ja) 2020-10-08
IL271729B1 (en) 2023-04-01
WO2019025762A1 (en) 2019-02-07
CN110945509B (zh) 2023-08-11
KR20200031671A (ko) 2020-03-24
CN110945509A (zh) 2020-03-31
EP3662404B1 (en) 2021-09-01

Similar Documents

Publication Publication Date Title
KR102532395B1 (ko) 메모리 보안용 카운터 무결성 트리
US10733313B2 (en) Counter integrity tree for memory security
US11658808B2 (en) Re-encryption following an OTP update event
US11775177B2 (en) Integrity tree for memory integrity checking
US20130247231A1 (en) Secure processing unit systems and methods
KR102117838B1 (ko) 캐시 메모리의 보안-관련 데이터를 보호하기 위한 방법
US20150363333A1 (en) High performance autonomous hardware engine for inline cryptographic processing
US20240028775A1 (en) Hardware protection of inline cryptographic processor
US20230259660A1 (en) Integrity tree for memory security
US11281434B2 (en) Apparatus and method for maintaining a counter value
US20240078323A1 (en) Counter tree
WO2016053407A2 (en) Speculative cryptographic processing for out of order data
US20240080193A1 (en) Counter integrity tree
US12010242B2 (en) Memory protection using cached partial hash values
US20220014379A1 (en) Memory protection using cached partial hash values
Meng et al. Tree Technology for Memory Confidentiality Integrity Protection
Hou et al. Static, Dynamic and Incremental MAC Combined Approach for Storage Integrity Protection
Hu et al. Memory Integrity Protection

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant