퍼블릭 키 암호화 표준(PKCS) #11 라이브러리 - FreeRTOS

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

퍼블릭 키 암호화 표준(PKCS) #11 라이브러리

Overview

퍼블릭 키 암호화 표준 #11(PKCS#11)은 키 스토리지, 암호화 객체에 대한 get/set 속성 및 세션 의미 체계를 추출하는 암호화 API입니다. FreeRTOS 소스 코드 리포지토리에서 OASIS 표준 기구에서 가져온 pkcs11.h를 참조하십시오. 에서 FreeRTOS 참조 구현, PKCS#11 API TLS 도우미 인터페이스가 호출하는 동안 TLS 클라이언트 인증을 수행하기 위해 SOCKETS_Connect. 또한 1회 개발자 프로비저닝 워크플로우에서 PKCS#11 API 호출을 수행하여 TLS 클라이언트 인증서 및 개인 키를 가져오기 위해 AWS IoT MQTT 브로커. 이 두 사용 사례(프로비저닝 및 TLS 클라이언트 인증)에서는 PKCS#11 인터페이스 표준의 작은 하위 집합만 구현해야 합니다.

Features

PKCS#11의 다음 하위 집합이 사용됩니다. 이 목록은 프로비저닝, TLS 클라이언트 인증 및 정리를 지원하기 위해 루틴을 호출하는 순서와 거의 동일합니다. 함수에 대한 자세한 내용은 표준 위원회에서 제공하는 PKCS#11 문서를 참조하십시오.

일반 설정 및 제거 API

  • C_Initialize

  • C_Finalize

  • C_GetFunctionList

  • C_GetSlotList

  • C_GetTokenInfo

  • C_OpenSession

  • C_CloseSession

  • C_Login

프로비저닝 API

  • C_CreateObject CKO_PRIVATE_KEY(디바이스 프라이빗 키용)

  • C_CreateObject CKO_CERTIFICATE(디바이스 인증서 및 코드 확인 인증서용)

  • C_GenerateKeyPair

  • C_DestroyObject

클라이언트 인증

  • C_GetAttributeValue

  • C_FindObjectsInit

  • C_FindObjects

  • C_FindObjectsFinal

  • C_GenerateRandom

  • C_SignInit

  • C_Sign

  • C_VerifyInit

  • C_Verify

  • C_DigestInit

  • C_DigestUpdate

  • C_DigestFinal

비대칭 암호화 지원

FreeRTOS PKCS#11 참조 구현은 NIST P-256 곡선을 가진 ECDSA 및 2048비트 RSA(서명 전용)를 지원합니다. 다음 지침에서는 P-256 클라이언트 인증서를 기반으로 AWS IoT 사물을 생성하는 방법을 설명합니다.

다음 버전 이상의 AWS CLI 및 OpenSSL을 사용 중인지 확인하십시오.

aws --version aws-cli/1.11.176 Python/2.7.9 Windows/8 botocore/1.7.34 openssl version OpenSSL 1.0.2g 1 Mar 2016

다음 절차에 따라 사용하기로 가정합니다. aws configure 명령을 사용하여 AWS CLI. 자세한 내용은 aws 구성이 가능한 빠른 구성 in the AWS Command Line Interface 사용 설명서.

만들려면 AWS IoT P-256 클라이언트 인증서를 기반으로 한 것

  1. AWS IoT 사물을 생성합니다.

    aws iot create-thing --thing-name thing-name
  2. OpenSSL을 사용해 P-256 키를 생성합니다.

    openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out thing-name.key
  3. 2단계에서 생성한 키로 서명된 인증서 등록 요청을 생성합니다.

    openssl req -new -nodes -days 365 -key thing-name.key -out thing-name.req
  4. 인증서 등록 요청을 AWS IoT에 제출합니다.

    aws iot create-certificate-from-csr \ --certificate-signing-request file://thing-name.req --set-as-active \ --certificate-pem-outfile thing-name.crt
  5. (이전 명령에서 출력된 ARN에서 참조되는) 인증서를 사물에 연결합니다.

    aws iot attach-thing-principal --thing-name thing-name \ --principal "arn:aws:iot:us-east-1:123456789012:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729"
  6. 정책을 생성합니다. (이 정책은 너무 비쌉니다. 개발 목적으로만 사용해야 합니다.)

    aws iot create-policy --policy-name FullControl --policy-document file://policy.json

    다음은 create-policy 명령에 지정되는 policy.json 파일 목록입니다. Greengrass 연결 및 검색을 위해 FreeRTOS 데모를 실행하지 않으려면 greengrass:* 작업을 생략할 수 있습니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*" }, { "Effect": "Allow", "Action": "greengrass:*", "Resource": "*" } ] }
  7. 보안 주체(인증서) 및 정책을 사물에 연결합니다.

    aws iot attach-principal-policy --policy-name FullControl \ --principal "arn:aws:iot:us-east-1:123456789012:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729"

이제 이 안내서의 AWS IoT 시작하기 단원에 나오는 단계를 따릅니다. 생성한 인증서 및 프라이빗 키를 aws_clientcredential_keys.h 파일에 복사해야 합니다. 사물 이름을 aws_clientcredential.h에 복사합니다.

참고

인증서와 프라이빗 키는 데모 용도로만 하드 코딩됩니다. 프로덕션 수준 애플리케이션은 이러한 파일을 보안 위치에 저장해야 합니다.

Porting

PKCS #11 라이브러리를 플랫폼에 이식하는 방법에 대한 자세한 내용은 FreeRTOS 이식 안내서의 PKCS #11 라이브러리 이식 단원을 참조하십시오.