Oracle® Solaris 11.2의 암호화 및 인증서 관리

인쇄 보기 종료

업데이트 날짜: 2014년 9월
 
 

pktool 명령을 사용하여 대칭 키를 생성하는 방법

일부 응용 프로그램에서 통신을 암호화 및 해독하려면 대칭 키가 필요합니다. 이 절차에서 대칭 키를 만들고 저장합니다.

사이트에 난수 생성기가 있는 경우 생성기를 사용하여 키에 대한 난수를 생성할 수 있습니다. 이 절차에서는 사이트의 난수 생성기를 사용하지 않습니다.

  1. (옵션) 키 저장소를 사용하려면 하나 만듭니다.
  2. 대칭 키로 사용할 난수를 생성합니다.

    다음 방법 중 하나를 사용합니다.

    • 키를 생성하고 파일에 저장합니다.

      파일에 저장된 키의 이점은, 응용 프로그램의 키 파일(예: /etc/inet/secret/ipseckeys 파일 또는 IPsec)에 사용할 키를 이 파일에서 추출할 수 있다는 것입니다. 사용법 명령문은 인수를 보여줍니다.

      % pktool genkey keystore=file
      ...genkey keystore=file
      outkey=key-fn
      [ keytype=aes|arcfour|des|3des|generic ]
      [ keylen=key-size (AES, ARCFOUR or GENERIC only)]
      [ print=y|n ]
      outkey=key-fn

      키가 저장되는 파일 이름입니다.

      keytype=specific-symmetric-algorithm

      모든 길이의 대칭 키의 경우 값이 generic입니다. 특정 알고리즘에 대해 aes, arcfour, des 또는 3des를 지정합니다.

      FIPS 140 승인 알고리즘의 경우 FIPS에서 검증한 키 유형을 선택합니다. Using a FIPS 140 Enabled System in Oracle Solaris 11.2 의 FIPS 140 Algorithms in the Cryptographic Framework을 참조하십시오.

      keylen=size-in-bits

      비트 단위의 키 길이입니다. 숫자는 8로 나눌 수 있어야 합니다. des 또는 3des에 대해서는 지정하지 마십시오.

      FIPS 140 승인 알고리즘의 경우 FIPS에서 검증한 키 길이를 선택합니다. Using a FIPS 140 Enabled System in Oracle Solaris 11.2 의 FIPS 140 Algorithms in the Cryptographic Framework을 참조하십시오.

      print=n

      터미널 창에 키를 인쇄합니다. 기본적으로 print의 값은 n입니다.

    • 키를 생성하고 PKCS #11 키 저장소에 저장합니다.

      PKCS #11 키 저장소의 이점은, 레이블로 키를 검색할 수 있다는 것입니다. 이 방법은 파일을 암호화하고 해독하는 키에 유용합니다. 이 방법을 사용하기 전에 Step 1을 완료해야 합니다. 사용법 명령문은 인수를 보여줍니다. 키 저장소 인수 주위의 대괄호는 키 저장소 인수를 지정하지 않을 경우 키가 PKCS #11 키 저장소에 저장됨을 나타냅니다.

      $ pktool genkey keystore=pkcs11
      ...genkey [ keystore=pkcs11 ]
      label=key-label
      [ keytype=aes|arcfour|des|3des|generic ]
      [ keylen=key-size (AES, ARCFOUR or GENERIC only)]
      [ token=token[:manuf[:serial]]]
      [ sensitive=y|n ]
      [ extractable=y|n ]
      [ print=y|n ]
      label=key-label

      사용자가 지정한 키의 레이블입니다. 레이블로 키 저장소에서 키를 검색할 수 있습니다.

      keytype=specific-symmetric-algorithm

      모든 길이의 대칭 키의 경우 값이 generic입니다. 특정 알고리즘에 대해 aes, arcfour, des 또는 3des를 지정합니다.

      FIPS 140 승인 알고리즘의 경우 FIPS에서 검증한 키 유형을 선택합니다. Using a FIPS 140 Enabled System in Oracle Solaris 11.2 의 FIPS 140 Algorithms in the Cryptographic Framework을 참조하십시오.

      keylen=size-in-bits

      비트 단위의 키 길이입니다. 숫자는 8로 나눌 수 있어야 합니다. des 또는 3des에 대해서는 지정하지 마십시오.

      FIPS 140 승인 알고리즘의 경우 FIPS에서 검증한 키 길이를 선택합니다. Using a FIPS 140 Enabled System in Oracle Solaris 11.2 의 FIPS 140 Algorithms in the Cryptographic Framework을 참조하십시오.

      token=token

      토큰 이름입니다. 기본적으로 토큰은 Sun Software PKCS#11 softtoken입니다.

      sensitive=n

      키의 민감도를 지정합니다. 값이 y이면 print=y 인수를 사용하여 키를 인쇄할 수 없습니다. 기본적으로 sensitive의 값은 n입니다.

      extractable=y

      키 저장소에서 키를 추출할 수 있는지 지정합니다. 키가 추출되지 않도록 하려면 n을 지정합니다.

      print=n

      터미널 창에 키를 인쇄합니다. 기본적으로 print의 값은 n입니다.

    • 키를 생성하고 NSS 키 저장소에 저장합니다.

      이 방법을 사용하기 전에 Step 1을 완료해야 합니다. 사용법 명령문은 인수를 보여줍니다.

      $ pktool genkey keystore=nss
      ...genkey keystore=nss
      label=key-label
      [ keytype=aes|arcfour|des|3des|generic ]
      [ keylen=key-size (AES, ARCFOUR or GENERIC only)]
      [ token=token[:manuf[:serial]]]
      [ dir=directory-path ]
      [ prefix=DBprefix ]
      label=key-label

      사용자가 지정한 키의 레이블입니다. 레이블로 키 저장소에서 키를 검색할 수 있습니다.

      keytype=specific-symmetric-algorithm

      모든 길이의 대칭 키의 경우 값이 generic입니다. 특정 알고리즘에 대해 aes, arcfour, des 또는 3des를 지정합니다.

      FIPS 140 승인 알고리즘의 경우 FIPS에서 검증한 키 유형을 선택합니다. Using a FIPS 140 Enabled System in Oracle Solaris 11.2 의 FIPS 140 Algorithms in the Cryptographic Framework을 참조하십시오.

      keylen=size-in-bits

      비트 단위의 키 길이입니다. 숫자는 8로 나눌 수 있어야 합니다. des 또는 3des에 대해서는 지정하지 마십시오.

      FIPS 140 승인 알고리즘의 경우 FIPS에서 검증한 키 길이를 선택합니다. Using a FIPS 140 Enabled System in Oracle Solaris 11.2 의 FIPS 140 Algorithms in the Cryptographic Framework을 참조하십시오.

      token=token

      토큰 이름입니다. 기본적으로 토큰은 NSS 내부 토큰입니다.

      dir=directory

      NSS 데이터베이스에 대한 디렉토리 경로입니다. 기본적으로 directory가 현재 디렉토리입니다.

      prefix=directory

      NSS 데이터베이스의 접두어입니다. 기본값은 접두어 없음입니다.

  3. (옵션) 키가 존재하는지 확인합니다.

    키를 저장한 위치에 따라 다음 명령 중 하나를 사용합니다.

    • key-fn 파일에서 키를 확인합니다.
      % pktool list keystore=file objtype=key [infile=key-fn]
      Found n keys.
      Key #1 - keytype:location (keylen)
    • PKCS #11 또는 NSS 키 저장소에서 키를 확인합니다.
      For PKCS #11, use the following command:
      $ pktool list keystore=pkcs11 objtype=key
      Enter PIN for keystore:
      Found n keys.
      Key #1 - keytype:location (keylen)

      또는 명령에서 keystore=pkcs11keystore=nss로 바꿉니다.

예 3-1  pktool 명령을 사용하여 대칭 키 만들기

다음 예에서 사용자가 처음으로 PKCS #11 키 저장소를 만들고, 응용 프로그램에 대한 대형 대칭 키를 생성합니다. 마지막으로, 키가 키 저장소에 있는지 확인합니다.

PKCS #11 키 저장소의 초기 암호는 changeme입니다. NSS 키 저장소의 초기 암호는 비어 있는 암호입니다.

# pktool setpin
Create new passphrase:Type password
Re-enter new passphrase:Retype password
Passphrase changed.
% pktool genkey label=specialappkey keytype=generic keylen=1024
Enter PIN for Sun Software PKCS#11 softtoken  :Type password

% pktool list objtype=key
Enter PIN for Sun Software PKCS#11 softtoken  :Type password
No.      Key Type      Key Len.      Key Label
----------------------------------------------------
Symmetric keys:
1        Symmetric     1024          specialappkey
예 3-2  pktool 명령을 사용하여 FIPS에서 승인한 AES 키 만들기

다음 예에서 FIPS 승인 알고리즘과 키 유형을 사용하여 AES 알고리즘의 보안 키를 만듭니다. 나중에 해독을 위해 로컬 파일에 키를 저장합니다. 명령이 400 사용 권한으로 파일을 보호합니다. 키를 만들 때 print=y 옵션이 터미널 창에 생성된 키를 표시합니다.

키 파일을 소유한 사용자가 od 명령을 사용하여 키를 검색합니다.

% pktool genkey keystore=file outkey=256bit.file1 keytype=aes keylen=256 print=y
Key Value ="aaa2df1d10f02eaee2595d48964847757a6a49cf86c4339cd5205c24ac8c8873"
% od -x 256bit.file1

0000000 aaa2 df1d 10f0 2eae e259 5d48 9648 4775
0000020 7a6a 49cf 86c4 339c d520 5c24 ac8c 8873
0000040
예 3-3  IPsec 보안 연관에 대한 대칭 키 만들기

다음 예에서 관리자가 수동으로 IPsec SA에 대한 키 관련 자료를 만들고 파일에 저장합니다. 그런 다음, 관리자가 /etc/inet/secret/ipseckeys 파일로 키를 복사하고 원본 파일을 삭제합니다.

먼저, 관리자가 IPsec 정책에 필요한 키를 만들고 표시합니다.

# pktool genkey keystore=file outkey=ipencrin1 keytype=generic keylen=192 print=y
Key Value ="294979e512cb8e79370dabecadc3fcbb849e78d2d6bd2049"
# pktool genkey keystore=file outkey=ipencrout1 keytype=generic keylen=192 print=y
Key Value ="9678f80e33406c86e3d1686e50406bd0434819c20d09d204"
# pktool genkey keystore=file outkey=ipspi1 keytype=generic keylen=32 print=y
Key Value ="acbeaa20"
# pktool genkey keystore=file outkey=ipspi2 keytype=generic keylen=32 print=y
Key Value ="19174215"
# pktool genkey keystore=file outkey=ipsha21 keytype=generic keylen=256 print=y
Key Value ="659c20f2d6c3f9570bcee93e96d95e2263aca4eeb3369f72c5c786af4177fe9e"
# pktool genkey keystore=file outkey=ipsha22 keytype=generic keylen=256 print=y
Key Value ="b041975a0e1fce0503665c3966684d731fa3dbb12fcf87b0a837b2da5d82c810"

그런 후 관리자가 다음 /etc/inet/secret/ipseckeys 파일을 만듭니다.

##   SPI values require a leading 0x.
##   Backslashes indicate command continuation.
##
## for outbound packets on this system
add esp spi 0xacbeaa20 \
src 192.168.1.1 dst 192.168.2.1 \
encr_alg aes auth_alg sha256  \
encrkey  294979e512cb8e79370dabecadc3fcbb849e78d2d6bd2049 \
authkey  659c20f2d6c3f9570bcee93e96d95e2263aca4eeb3369f72c5c786af4177fe9e
##
## for inbound packets
add esp spi 0x19174215 \
src 192.168.2.1 dst 192.168.1.1 \
encr_alg aes auth_alg sha256  \
encrkey 9678f80e33406c86e3d1686e50406bd0434819c20d09d204 \
authkey b041975a0e1fce0503665c3966684d731fa3dbb12fcf87b0a837b2da5d82c810

ipseckeys 파일의 구문이 유효한지 확인한 후에 관리자가 원본 키 파일을 삭제합니다.

# ipseckey -c /etc/inet/secret/ipseckeys
# rm ipencrin1 ipencrout1 ipspi1 ipspi2 ipsha21 ipsha22

관리자가 ssh 명령 또는 다른 보안 방식을 사용하여 ipseckeys 파일을 통신 시스템에 복사합니다. 통신 시스템에서 보호 사항이 반전됩니다. ipseckeys 파일의 첫번째 항목이 인바운드 패킷을 보호하고, 두번째 항목이 아웃바운드 패킷을 보호합니다. 통신 시스템에는 키가 생성되지 않습니다.

다음 단계

계속 키를 사용하여 파일의 MAC(메시지 인증 코드)를 만들려면 파일의 MAC을 계산하는 방법을 참조하십시오.