docker trust key generate 명령어를 사용하여 서명 키 생성 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 안전한 통신 및 소프트웨어 배포를 위한 기본적인 단계인 gpg 명령을 사용하여 서명 키 쌍을 생성하는 방법을 배우게 됩니다. 지정된 키 크기 및 유효 기간을 가진 새로운 RSA 및 RSA 키 쌍을 생성하고, 프로세스 중에 필수 사용자 ID 정보를 제공합니다.

키 생성 후에는 새로운 키에 대한 암호를 입력하고 확인하는 방법을 배우게 되는데, 이는 중요한 보안 조치입니다. 그런 다음 생성된 공개 키 파일의 정확성을 확인합니다. 마지막으로, 키를 관리하는 유연성을 보여주는 특정 디렉토리에서 키 쌍을 생성하는 방법을 살펴봅니다.

새로운 서명 키 쌍 생성

이 단계에서는 gpg 명령을 사용하여 새로운 서명 키 쌍을 생성하는 방법을 배우게 됩니다. 서명 키 쌍은 개인 키와 공개 키로 구성됩니다. 개인 키는 데이터 서명에 사용되고, 공개 키는 서명을 확인하는 데 사용됩니다. 이는 안전한 통신 및 소프트웨어 배포의 기본 개념입니다.

먼저, 터미널을 엽니다. 이미 ~/project 디렉토리에 있습니다.

새로운 키 쌍을 생성하려면 다음 명령을 사용하십시오.

gpg --full-generate-key

명령을 실행한 후, 원하는 키 종류를 선택하라는 메시지가 표시됩니다. 이 랩에서는 기본 옵션인 RSA and RSA를 사용합니다. 기본값을 수락하려면 Enter 키를 누르십시오.

gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1

다음으로, 키 크기에 대해 묻는 메시지가 표시됩니다. 키 크기가 클수록 더 많은 보안을 제공하지만 생성 및 사용에 더 오래 걸립니다. 이 랩에서는 기본 키 크기인 3072 비트를 사용합니다. 기본값을 수락하려면 Enter 키를 누르십시오.

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072)

그런 다음 키의 유효 기간을 묻는 메시지가 표시됩니다. 이 랩에서는 키를 1 년 동안 유효하게 만듭니다. 1y를 입력하고 Enter 키를 누르십시오.

Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 1y

y를 입력하고 Enter 키를 눌러 키가 표시된 날짜에 만료되는지 확인합니다.

Key expires at ...
Is this correct? (y/N) y

이제 사용자 ID 정보를 제공해야 합니다. 이 정보는 공개 키와 연결되어 다른 사람들이 사용자를 식별하는 데 도움이 됩니다.

먼저, 실제 이름을 입력합니다. 이 랩에서는 LabEx User를 사용할 수 있습니다. LabEx User를 입력하고 Enter 키를 누르십시오.

Real name: LabEx User

다음으로, 이메일 주소를 입력합니다. 이 랩에서는 user@labex.io를 사용할 수 있습니다. user@labex.io를 입력하고 Enter 키를 누르십시오.

Email address: user@labex.io

선택적으로, 주석을 추가할 수 있습니다. 이 랩에서는 주석 필드를 비워 둡니다. 주석을 건너뛰려면 Enter 키를 누르십시오.

Comment:

입력한 정보를 검토합니다. 정보가 정확하면 O를 입력하여 확인하고 Enter 키를 누릅니다. 변경해야 하는 경우 C를 입력하여 변경하거나 Q를 입력하여 종료합니다.

You selected this USER-ID:
    "LabEx User <user@labex.io>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

마지막으로, 개인 키를 보호하기 위해 암호를 입력하라는 메시지가 표시됩니다. 이는 중요한 보안 단계입니다. 기억할 수 있는 강력한 암호를 선택하십시오. 다음 단계에서 이 암호를 다시 입력해야 합니다.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator more entropy.

그런 다음 시스템은 키 쌍을 생성합니다. 잠시 시간이 걸릴 수 있습니다.

새로운 키에 대한 암호 입력 및 확인

이전 단계에서 새로운 GPG 키 쌍을 생성하는 프로세스를 시작했습니다. 이 프로세스의 마지막 단계는 개인 키에 대한 암호를 입력하고 확인하는 것입니다. 이 암호는 무단 사용으로부터 개인 키를 보호하는 데 필수적입니다.

이제 암호를 입력하라는 대화 상자 또는 터미널의 프롬프트가 표시됩니다.

┌─────────┤ Please enter the passphrase to protect your new key ├─────────┐
│                                                                         │
│ Passphrase: _________________________________________                   │
│                                                                         │
│        <OK>                                          <Cancel>           │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

"Passphrase" 필드에 강력한 암호를 입력하십시오. 개인 키를 사용할 때마다 (예: 서명용) 이 암호를 기억해야 합니다. 이 랩에서는 mypassphrase123과 같은 간단한 암호를 사용할 수 있습니다. mypassphrase123을 입력하고 Enter 키를 누르거나 <OK>를 클릭하십시오.

그런 다음 암호를 다시 입력하여 암호를 확인하라는 메시지가 표시됩니다. 이렇게 하면 암호를 올바르게 입력했는지 확인할 수 있습니다.

┌─────────┤ Please re-enter the passphrase to protect your new key ├─────────┐
│                                                                          │
│ Repeat passphrase: _________________________________________             │
│                                                                          │
│        <OK>                                           <Cancel>            │
│                                                                          │
└──────────────────────────────────────────────────────────────────────────┘

"Repeat passphrase" 필드에 동일한 암호 (mypassphrase123) 를 다시 입력하고 Enter 키를 누르거나 <OK>를 클릭하십시오.

암호를 확인한 후 GPG 는 키 쌍 생성을 완료합니다. 키 생성이 완료되었음을 나타내는 다음과 유사한 출력이 표시됩니다.

gpg: key ... marked as ultimately trusted
gpg: revocation certificate stored as '/home/labex/.gnupg/openpgp-revocs.d/....rev'
public and secret key created and signed.

pub   rsa3072 2023-10-27 [SC]
      ...
uid           [ultimate] LabEx User <user@labex.io>
sub   rsa3072 2023-10-27 [E]

출력은 키 유형 (rsa3072), 생성 날짜, 키 ID(...), 제공한 사용자 ID(LabEx User <user@labex.io>) 를 포함하여 새로 생성된 키에 대한 정보를 보여줍니다. pub 줄은 공개 키를 나타내고, sub 줄은 하위 키 (암호화에 사용) 를 나타냅니다.

이제 GPG 키 쌍을 성공적으로 생성하고 암호로 개인 키를 보호했습니다.

생성된 공개 키 파일 확인

이전 단계에서 GPG 키 쌍을 성공적으로 생성했습니다. 이제 공개 키가 올바르게 생성되었고 사용 가능한지 확인해 보겠습니다. 공개 키는 다른 사람과 공유하여 서명을 확인하거나 메시지를 암호화할 수 있도록 하는 것입니다.

키링에 있는 공개 키를 나열하려면 gpg --list-keys 명령을 사용하십시오. 키 생성 중에 "LabEx User"를 이름으로 지정했으므로 출력을 필터링하여 키만 표시할 수 있습니다.

gpg --list-keys "LabEx User"

공개 키가 있음을 확인하는 다음과 유사한 출력이 표시됩니다.

pub   rsa3072 2023-10-27 [SC]
      ...
uid           [ultimate] LabEx User <user@labex.io>
sub   rsa3072 2023-10-27 [E]

이 출력은 키 유형 (pub), 알고리즘 (rsa3072), 생성 날짜 (2023-10-27), 기능 ([SC]는 서명 및 인증용), 키 ID(...), 사용자 ID(LabEx User <user@labex.io>), 암호화 하위 키 (sub) 에 대한 정보를 포함하여 공개 키의 세부 정보를 보여줍니다.

공개 키를 파일로 내보내려면 gpg --output <filename> --armor --export <user ID> 명령을 사용할 수 있습니다. --armor 옵션은 사람이 읽을 수 있는 텍스트 형식인 ASCII 아머 형식으로 키를 출력합니다. "LabEx User"의 공개 키를 현재 디렉토리 (~/project) 에 labex_user_public.key라는 파일로 내보내 보겠습니다.

gpg --output labex_user_public.key --armor --export "LabEx User"

이 명령은 공개 키가 포함된 labex_user_public.key라는 파일을 ~/project 디렉토리에 생성합니다.

cat 명령을 사용하여 이 파일의 내용을 볼 수 있습니다.

cat labex_user_public.key

출력은 -----BEGIN PGP PUBLIC KEY BLOCK-----로 시작하여 -----END PGP PUBLIC KEY BLOCK-----로 끝나는 ASCII 아머 공개 키 블록을 표시합니다.

-----BEGIN PGP PUBLIC KEY BLOCK-----

... (your public key content) ...

-----END PGP PUBLIC KEY BLOCK-----

이렇게 하면 공개 키가 파일로 성공적으로 내보내졌음을 확인할 수 있습니다. 이제 서명을 확인하거나 데이터를 암호화해야 하는 다른 사람과 이 파일을 공유할 수 있습니다.

지정된 디렉토리에 키 페어 생성

이전 단계에서 기본 GPG 홈 디렉토리 (~/.gnupg) 에 저장된 GPG 키 쌍을 생성했습니다. 특정 프로젝트를 위해 또는 주 키링과 분리하기 위해 키를 생성하여 다른 위치에 저장해야 할 수도 있습니다.

이 단계에서는 GPG 키 쌍을 생성하고 키 파일을 저장할 다른 디렉토리를 지정하는 방법을 배웁니다.

먼저 새 키 쌍을 저장할 새 디렉토리를 만들어 보겠습니다. ~/project 디렉토리 내에 mykeys라는 디렉토리를 생성합니다.

mkdir ~/project/mykeys

이제 키 쌍을 생성하고 ~/project/mykeys 디렉토리에 저장하려면 gpg 명령과 함께 --homedir 옵션을 사용해야 합니다. 이 옵션은 GPG 에 기본 디렉토리 대신 지정된 디렉토리를 홈 디렉토리로 사용하도록 지시합니다.

다음 명령을 사용하여 키 생성 프로세스를 시작하고 ~/project/mykeys 디렉토리를 지정합니다.

gpg --homedir ~/project/mykeys --full-generate-key

1 단계와 2 단계와 동일한 키 생성 프로세스를 안내받게 됩니다.

  1. Select the kind of key: Enter 키를 눌러 기본값인 RSA and RSA를 선택합니다.
  2. What keysize do you want? Enter 키를 눌러 기본값인 3072를 선택합니다.
  3. Key is valid for? 1y를 입력하여 1 년을 지정하고 Enter 키를 누릅니다.
  4. Is this correct? y를 입력하고 Enter 키를 누릅니다.
  5. Real name: Project User를 입력하고 Enter 키를 누릅니다.
  6. Email address: projectuser@labex.io를 입력하고 Enter 키를 누릅니다.
  7. Comment: Enter 키를 눌러 비워둡니다.
  8. Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O를 입력하고 Enter 키를 누릅니다.
  9. Enter passphrase: 암호 (예: projectpassphrase456) 를 입력하고 Enter 키를 누릅니다.
  10. Repeat passphrase: 동일한 암호 (projectpassphrase456) 를 다시 입력하고 Enter 키를 누릅니다.

이 단계를 완료하면 GPG 가 키 쌍을 생성하고 필요한 파일을 ~/project/mykeys 디렉토리에 저장합니다.

해당 홈 디렉토리에서 키를 나열하여 키가 지정된 디렉토리에 생성되었는지 확인할 수 있습니다.

gpg --homedir ~/project/mykeys --list-keys "Project User"

방금 생성한 키를 보여주는 다음과 유사한 출력이 표시됩니다.

gpg: directory '/home/labex/project/mykeys' created
gpg: keybox '/home/labex/project/mykeys/pubring.kbx' created
pub   rsa3072 2023-10-27 [SC]
      ...
uid           [ultimate] Project User <projectuser@labex.io>
sub   rsa3072 2023-10-27 [E]

GPG 디렉토리와 키 상자가 ~/project/mykeys 내에 생성되었음을 나타내는 줄에 유의하십시오. 이렇게 하면 키가 지정된 위치에 생성되었음을 확인할 수 있습니다.

요약

이 랩에서는 gpg 명령을 사용하여 새로운 서명 키 쌍을 생성하는 방법을 배웠습니다. 이 프로세스에는 키 유형 선택 (기본값은 RSA 및 RSA), 키 크기 지정 (기본값은 3072 비트) 및 키의 유효 기간 설정 (이 랩에서는 1 년으로 설정) 이 포함됩니다. 또한 개인 키를 보호하기 위해 새 키에 대한 암호를 입력하고 확인하는 방법도 배웠습니다. 마지막으로, 생성된 공개 키 파일을 확인하고 지정된 디렉토리에서 키 쌍을 생성하여 안전한 통신 및 소프트웨어 배포를 위한 개인 키와 공개 키의 기본 개념을 이해했습니다.