인디노트

KMIP 에 대한 내용 본문

인증기술/보안기술

KMIP 에 대한 내용

인디개발자 2021. 7. 14. 17:38

KMIP 서버는 대칭키 및 비대칭키, 인증서 및 사용자 정의 개체등을 저장하고 관리합니다.

클라이언트는 서버에서 구현되는 보안 모델에 따라서 이러한 개체에 엑세스하기 위해서 KMIP 를 사용합니다.

이러한 관리 개체를 생성, 찾기, 검색 및 업데이트를 할 수 있습니다.

 

KMIP 에서 관리하는 개체의 유형

  • AES 와 같은 암호 알고리즘에 사용되는 대칭키
  • RSA 및  ECDH 와 같은 비대칭키 알고리즘에 사용되는 개인키와 공개키
    • 개인키와 공개키는 각각 저장되며 각각 액세스 권한이 따로 존재함
    • 개인키와 공개키는 각각 다른 개체에 대한 링크 속성을 포함
  • 인증서 및 PGP 키
  • 분할 키; 각 분할된 키는 다른 분할된 내용과 독립적으로 관리되는 별개의 개체
  • 비밀번호와 같은 비밀데이터
  • 클라이언트 및 서버에 대한 정의 같은 비공개적인 데이터
  • 인증서 서명 요청 (CSR)

KMIP 에서 제공하는 기능

  • 대칭키와 같은 새로운 관리 개체를 생성하고 식별자를 반환
  • 비대칭키의 키쌍을 생성
  • 고유 식별자가 지정된 개체의 값을 가져오기, 가져온 값은 보안을 위해서 다른 키로 래핑(암호화) 될 수 있음
  • 외부에서 생성된 키를 등록하여 저장
  • 속성 추가, 속성 조회, 속성 수정 및 설정
  • 술어를 기반으로 개체 목록을 찾아서 검색
  • 키 재성성 및 기존키를 새로운 키를 생성하여 대체, 서버가 지정된 기간 혹은 지정된 사용횟수 후에 자동으로 키를 교체하도록 할수 있는 속성도 있음.
  • 키의 이름은 일반적으로 암호화 및 서명과 같은 보호 작업을 위해 사용됨
  • 함호 해독 및 서명 확인과 같은 프로세스 작업을 위해서 고유 식별자를 사용하여 이전 키를 검색할 수 있음
  • 인증 - 인증서를 인증함
  • N개의 M 키를 분할하고 결합
  • 암호화, 복호화, MAC 등 키 관리 서버에서 수행되는 암호화 작업, 키 자체가 추출 불가능으로 표시됨, 이경우 해당 키값은 서버를 떠나지 않음
  • 다른 KMIP 서버로 키를 내보내거나 다른 KMIP 서버에서 키를 가져올 수 있음
  • NIST 키 수명주기 구현

키 수명 주기

각 키에는 NIST (National Institute of Standards and Technology) 에서 정의한 암호화 상태가 있습니다. 키는 초기 상태에서 생성되면 사용하기 전에 활성화 되어야 합니다. 키는 비활성화되고 폐기 될 수 있습니다. 키가 손상되었음을 표시 할 수도 있습니다.

NIST 수명 주기 지침에 따라 키 상태를 조작하기 위한 작업이 제공됩니다.

Key-state 는 State 속성 또는 Activation Date 와 같은 각 변환의 날짜를 기록하는 속성을 사용하여 수명 주기를 확인할 수 있습니다. 날짜를 미래로 지정하며 만료되면 지정된 작업에 대하여 키를 사용할 수 없게 할 수 있습니다.

메시지 구조

KMIP 는 클라이언트에서 서버로 메시지를 보낸 다음 클라이언트가 응답을 기다리는 상태 비저장 프로토콜입니다.

각 요청에는 많은 작업이 포함될 수 있으므로 프로토콜이 많은 수의 키를 효율적으로 처리할 수 있습니다.

요청을 비동기적으로 처리하기 위한 고급 기능도 있습니다.

KMIP 프로토콜은 여러가지 다른 유형으로 인코딩을 지정합니다. 주된 내용은 TTLV (태그, 유형, 길이, 값) 이라고 하는 인코딩입니다. 중첩된 TTLV 구조를 사용하면 복잡한 다중 작업 메시지를 단일 이진 메시지로 인코딩 할 수 있습니다.

바이너리가 적절하지 않은 환경을 위한 프로토콜의 잘 정의된 XML및 JSON 인코딩도 있습니다.

매우 컴팩트한 CBOR 인코딩이 필요한 응용 프로그램에도 제공됩니다.

이러한 모든 프로토콜은 무결성과 보안을 보장하기 위해 TLS 프로토콜을 사용하여 전송될 것으로 예상 됩니다.

추가적인 보안 수준을 제공하는 서버는 다른 키를 사용하여 래핑된 키를 등록하고 검색할 수도 있습니다.

시스템 관리

KMIP 는 시스템 개체를 사용하여 적절하게 권한이 부여된 관리 클라이언트가 KMIP 서버를 관리하는 표준화된 메커니즘을 제공합니다.

사용자 개체를 만들고 특정 관리개체에 대한 특정 작업을 수행하도록 권한을 부여할 수 있습니다.

Managed Object 와 Users 는 모두 그룹에 할당할 수 있으며 이러한 그룹은 복잡한 운영 환경의 효율적인 관리를 용이하게 하는 계층을 형성할 수 있습니다.

KMIP 는 일회용 암호를 사용하여 엔드포인트에 대한 자격증명을 제공하는 것을 용이하게하는 프로비저닝 시스템을 제공합니다.

속성의 기본값이 제공될 수 있으므로 단순 클라이언트는 암호화 및 기타 매개변수를 지정할 필요가 없습니다. 예를 들어, 관리 사용자는 모든 "SecretAgent" 키가 CBC 블록 체인을 사용하는 192 비트 AES 키여야 한다고 지정할 수 있습니다. 그런 다음 클라이언트는 "SecretAgent" 키를 생성하여 해당 기본값을 제공하도록 지정하기면 하면 됩니다. 보안 정책을 구현하는 주요 매개변수에 대한 제약을 적용하는 것도 가능합니다.

PKCS#11

PKCS#11 은 하드웨어 보안모듈 (HSM) 을 제어하는 C API 입니다.PKCS#11 은 암호화 및 복호화를 위한 작업과 간단한 키 관리를 위한 작업을 제공합니다. PKCS#11 API 와 KMIP 프로토콜 사이에는 상당한 양의 중복이 있습니다.

두 표준은 원래 독립적으로 개발되었습니다. PKCS#11 은 RSA Security 에서 만들었지만 표준은 이제 OASIS 기술 위원회에서도 관리합니다. PKCS#11 및 KMIP 위원회는 명시된 목표에 대한 실행 가능한 경우 표준을 조정합니다. 예를 들어 PKCS#11 Sensitive 및 Extractable 속성이 KMIP 버전 1.4 에 추가되었습니다. 같은 사람들이 KMIP 와 PKCS#11 의 기술위원회에 있습니다.

KMIP 2.0 은 클라이언트에서 서버로 PKCS#11 메시지를 전송하는 표준화된 메커니즘을 제공합니다. 이를 사용하는 프로그램을 다시 컴파일 할 필요 없이 다른 PKCS#11 구현을 대상으로 하는데 사용할 수 있습니다.

구현의 상호 운용성

KMIP 표준은 OASIS KMIP 기술 위원회에서 제시한 공식 사양문서 및 테스트 케이스 및 프로필을 사용하여 정의됩니다. 이 문서는 OASIS 웹사이트에서 공개적으로 사용할 수 있습니다.

공급업체는 각 RSA 보안 회의가 있기 몇단전에 OASIS KMIP 기술위원회에서 조직한 프로세스 동안 상호 운용성을 보여줍니다. 이러한 데모를 비공식적으로 interops 라고 합니다. KMIP interops 는 2010년 부터 매년 개최되고 있습니다.

 

다음은 "MyKeyName"이라는 키를 찾고 ID가 "c6d14516-4d38-0644-b810-1913b9aef4da"인 다른 키로 래핑된 값을 반환하라는 요청의 XML 인코딩을 보여줍니다. (TTLV는 더 일반적인 유선 프로토콜이지만 XML은 사람이 더 읽기 쉽습니다.)

<RequestMessage>
  <RequestHeader>
    <ProtocolVersion>
      <ProtocolVersionMajor type="Integer" value="3"/>
      <ProtocolVersionMinor type="Integer" value="0"/>
    </ProtocolVersion>
  </RequestHeader>
  <BatchItem>
    <Operation type="Enumeration" value="Locate"/>
    <UniqueBatchItemID type="ByteString" value="1"/>
    <RequestPayload>
      <Attributes>
        <Name type="TextString" value="MyKeyName"/>
      </Attributes>
    </RequestPayload>
  </BatchItem>
  <BatchItem>
    <Operation type="Enumeration" value="Get"/>
    <UniqueBatchItemID type="ByteString" value="2"/>
    <RequestPayload>
      <KeyWrappingSpecification>
        <WrappingMethod type="Enumeration" value="Encrypt"/>
        <EncryptionKeyInformation>
          <UniqueIdentifier type="Integer" value="c6d14516-4d38-0644-b810-1913b9aef4da"/>
        </EncryptionKeyInformation>
      </KeyWrappingSpecification>
    </RequestPayload>
  </BatchItem>
</RequestMessage>

 

외부 링크

 

반응형
Comments