2013-02-11 2 views
3

HSMA에 RSAPrivateKey를 래핑하여 키 보관을 위해 Microsoft CA로 전송할 수 있어야하며 어떤 접근 방식을 사용해야할지 모르겠습니다.HSM에 Microsoft RSA 키 BLOB를 래핑하는 방법

문제는 Microsoft RSA 키 형식이 독점적이며 내 회사에서 사용하는 pkcs11 또는 nCipher HSM에서 지원하지 않는 것입니다. 이는 HSM에서 키 쌍을 생성하는 간단한 것입니다 단지 RSAPrivateKey 인 경우

http://msdn.microsoft.com/en-us/library/cc250013.aspx

,의 HSM의 포장 키를로드 RSAPrivateKey 랩과 랩 된 열쇠 바이트를 추출합니다. 분명히이 주요 BLOB 형식이 지원되지 않기 때문에 나는 다른 접근법을 취할 필요가있다.

내 첫 번째 생각은 RSAPrivateKey를 확장하고 getEncoded() 메서드를 재정 의하여이 독점 키 형식을 반환하는 것입니다. Java에서 pkcs11에 고급 API를 제공하는 IAIK pkcs11 랩퍼를 사용하고 있으며 벤더 정의 키 유형을 작성하기위한 몇 가지 지원이 있습니다. 그러나 공급 업체 정의 키용 인터페이스는 클라이언트 코드에서 기본 제공 키 유형을 확장하는 편의를 위해서만 존재하며 실제로 HSM에서 키 인코딩을 수정할 수는 없습니다.

두 번째 아이디어는 pkcs11 데이터 개체를 사용하여 간단히 키 블로 브로로 처리 한 다음 래핑 키를 사용하여이를 암호화하는 것입니다. 여기서 같은 문제는 개인 키 바이트를 데이터 객체에 복사하기 위해 애플리케이션 키로 개인 키 바이트를 추출한 다음 거기에서 데이터 객체를 만들어야한다는 것입니다. HSM의 키.

나는이 접근법에 대한 대안을 찾고 있습니까 아니면 pkcs11에 몇 가지 기능이 있습니다. 모든 통찰력은 인정 될 것이다.

답변

2

이 데이터 형식은 nShield HSM에서 지원하지 않는 데이터 형식 인 것으로 동의합니다 (그래도 support team으로 다시 확인해야합니다).

이렇게 가정하면이 작업을 안전하게 수행 할 수있는 방법은 하나뿐입니다. 개인 키를로드하고 HSM 내에서 실행되는 맞춤형 코드로 전달하는 데 훨씬 낮은 수준의 API를 사용해야합니다 (CodeSafe 기술)을 사용하여 핵심 자료를 노출하고 필요한 형식으로 변환 한 다음 래핑 키로 래핑합니다.

다른 방법을 사용하면 호스트에 키 노출이 발생할 수 있습니다. 또한 합리적인 (기본) 사용 권한으로 키를 생성 한 경우 관리자 카드 세트를 사용하는 맞춤형 코드를 작성하지 않아도 키를 노출 할 수 없습니다.

문제에 대해 지원 팀에 문의하는 것이 좋습니다. 친절한 컨설턴트, 기침을 할 수도 있습니다. 누가 기침 할 수 있겠습니까?

+0

감사합니다. 해당 공급 업체에 연락합니다. 그 동안 우리는 HSM 내 nvram을 사용하여 몇 가지 솔루션을 탐색 할 수 있습니다. 해결책을 찾으면 내 질문을 업데이트 할 것입니다. – user1991762

+1

@ user1991762 죄송합니다.하지만 NVRAM으로 문제가 해결되지는 않습니다. –

+1

키를 민감하지 않은 것으로 생성하여 호스트에서 감싸고 C_SetAttributeValues를 사용하여 민감하게 만들 수 있습니다. 세션 키로 생성하고 민감한 토큰 키로 만 만드는 것이 이상적이지만 nCipher의 PKCS # 11 구현은 여전히 ​​허용하지 않습니다. CodeSafe를 사용하여 HSM 내부의 사용자 지정 배치를 이동하는 데 도움이되는 "친절한 컨설턴트, 기침"이 있으면 더 안전하게 할 수 있습니다. – armb

0

아마도 PKCS # 11 랩퍼를 사용하고 싶을 것입니다. 나는 당신이 Java 내에서 HSM과 상호 작용하는 것을 조금 혼란스럽게 생각한다. (당신이 Microsoft RSAPrivateKey로 보내기를 원하기 때문에 IAIK 나 .Net을 언급했기 때문이다.) 어쨌든 PKCS11 랩퍼 (Java 용 IAIK, .Net 용 NCryptoki)를 사용하면 PKCS#11 v2.30을 사용하여 HSM과 통신 할 수 있으므로 버전간에 비 호환성이있을 수 있으므로 랩퍼 및 HSM 스펙에서 지원되는 버전을 확인하십시오.

PKCS # 11을 사용하면 C_GenerateKeyPair 기능을 사용하여 HSM에서 RSA 키 쌍을 생성 할 수 있습니다. 메커니즘 (RSA_PKCS_KEY_PAIR_GEN)을 지정하고 개인 키와 공개 키용으로 두 개의 템플리트를 제공해야합니다. 개인 키의 CKA_WRAP 속성이 true로 설정되었는지 확인하십시오.

HSM에서 래핑 키를로드하려면 C_CreateObject 함수를 템플릿과 함께 사용할 수 있습니다.

그런 다음 C_WrapKey 함수를 사용하여 개인 RSA 키를 HSM으로 가져온 키로 바꿀 수 있습니다. 먼저 C_FindObjectsInit, C_FindObjects 및 C_FindObjectsFinal을 사용하여 래핑 할 키와 래핑 키에 대한 핸들을 검색합니다. 그런 다음 적절한 Mechanism과 두 개의 핸들을 사용하여 C_WrapKey 함수를 호출하십시오.

+0

귀하의 답변에 진심으로 감사드립니다. 그러나 이것은 표준 RSA 키 쌍이 아닙니다. 위의 질문에 나는 HSM 내에서 생성 및 랩핑해야하는 Microsoft RSA 키 BLOB 형식에 대한 링크를 제공했습니다. – user1991762

0

지원되지 않는 독점 형식 인 경우이를 수행하기 위해 독점 코드를 HSM에서 실행해야 할 수 있습니다. 많은 HSM을 사용하면 독점 코드를 실행할 수 있지만, 먼저 코드를로드 할 수 있으려면 HSM 공급자의 지원이 필요합니다. 또한 HSM에서 자신의 코드를 실행하면 보안 인증 (FIPS 또는 Common Criteria)이 손상 될 수 있습니다.

그렇지 않은 경우 HSM에서 개인 키를 검색하고 보안 환경 내에서 올바른 형식으로 넣은 다음 HSM의 일반 암호화 기능을 사용하여 래핑해야합니다. 물론 개인 키가 HSM 외부에 노출됩니다.

선호하는 해결 방법이 있는지 Microsoft에 문의 할 수도 있습니다.

+0

nShield HSM의 경우 HSM에서 실행 코드가 FIPS 또는 CC 인증을 위반하지 않습니다. 그러나이 의견은 다른 브랜드에서도 마찬가지 일 수 있습니다. –

+0

@DuncanJones 흥미로운 것은 CC 또는 FIPS 인증의 적용 여부에 따라 달라질 수 있습니다. 나는 "가능성 있음"대신 "아마도"로 바꿀 것입니다 ... –