IBM Cloud Docs
TLS의 양자 안전 암호화

TLS의 양자 안전 암호화

양자 내성 지원 TLS 연결을 사용하여 요청을 IBM® Key Protect for IBM Cloud® 서비스 엔드포인트에 전송할 수 있습니다.

양자 내성 암호의 정의

'포스트 양자 암호'라고도 하는 양자 내성 암호는 NIST 평가를 받고 있는 공개 키 암호화 시스템의 새로운 세대입니다. 이 새로운 양자 암호 알고리즘은 현재 연구에 따르면 대형 양자 컴퓨터도 깰 수 없는 어려운 수학 문제를 기반으로 합니다.

이 양자 암호 알고리즘이 TLS 통신에 사용되는 경우, 클라이언트와 서버 간 공개 키 교환의 보안은 현재 RSA 및 ECC 알고리즘보다 높은 레벨의 보안이 기대됩니다. 그러나 NIST는 알고리즘을 표준화하지 않았으며 그때까지 Key Protect에서는 양자 내성과 현재 ECC 알고리즘을 모두 결합하여 전송 중인 데이터를 보호하는 하이브리드 방식을 채택했습니다.

양자 내성 TLS가 중요한 이유는 무엇입니까?

양자 컴퓨팅이 계속 진화하고 발전함에 따라, 대형 양자 컴퓨터는 은 "SHOR" 알고리즘 현재의 TLS 통신 알고리즘(RSA/ECC)을 단 몇 분 만에 깨뜨릴 수 있습니다 몇 분 만에 오늘날에는 대형 양자 컴퓨터를 사용할 수 없지만, 대형 양자 컴퓨터를 사용할 수 있게 되면 스누핑되어 저장된 모든 TLS 전송 데이터가 위반될 수 있습니다. 데이터는 저장 수명이 길기 때문에 TLS 통신을 보호하기 위해 Key Protect에서 양자 내성 암호 알고리즘을 지원하는 것이 중요합니다.

전송 중인 데이터의 복원성을 유지하기 위해, Key Protect에서는 양자 내성 기술이 지원되는 TLS 연결을 사용하여 키 교환 프로세스 중에 데이터를 안전하게 보호하는 기능을 도입했습니다.

양자 내성 암호의 고려 사항은 무엇입니까?

요청을 Key Protect에 양자 내성 기술이 지원되는 Key Protect 서비스 엔드포인트를 통해 전송하도록 서비스를 구성하기 전에 다음 고려사항을 기억하십시오.

  • 미국 국립표준기술연구소(NIST)는 양자 안전 알고리즘을 표준화하기 위한 작업을 진행 중입니다. NIST는 현재 양자 안전 암호화에 대한 후보 접근 방식을 평가하고 있으며 암호화에 대한 후보 접근법을 평가 중이며, 2023년 이후에야 표준화 과정을 2023년 이후에나 완료될 것으로 예상됩니다. Key Protect 카이버 알고리즘을 사용합니다, 이는 평가 중인 세 번째 라운드 후보 중 하나입니다. NIST의 연구에서 Kyber 알고리즘이 양자 내성이 아닌 것으로 밝혀지면 하이브리드 모드에서 Kyber 알고리즘을 사용할 때 키 교환 메커니즘은 여전히 ​​기존 TLS 알고리즘을 통해 보호됩니다.

  • 성능 결과는 기존 키 알고리즘과 다를 수 있습니다. 양자 내성 알고리즘은 기존 공개 키 알고리즘에 비해 사용하는 키가 크므로 네트워크 대역폭 요구 사항이 높아집니다. 양자 내성 알고리즘 성능은 네트워크 프로파일, CPU 속도 및 API 호출 비율에 영향을 받을 수도 있습니다.

  • 양자 내성 TLS는 저장 중이 아니라 전송 중인 데이터만 보호합니다. 다음 Key Protect에서 활용하는 양자 내성 알고리즘은 Key Protect 서비스 엔드포인트로 이동할 때 데이터가 침해되지 않도록 보호합니다. 가져온 루트 키(연관된 페이로드 포함)는 TLS 세션 키로 암호화됩니다. 저장 중인 데이터 암호화에서는 대칭 키를 사용하고 AES 256 대칭 키는 대형 양자 컴퓨터 공격으로부터 안전합니다.

  • Key Protect에서는 Linux 플랫폼용 양자 내성 TLS만 지원합니다. Key Protect에서는 향후 추가 운영 체제에 대한 양자 내성 TLS 연결을 지원합니다.

  • 양자 내성 TLS는 Key Protect 소프트웨어 개발 킷(SDK)을 통해서만 지원됩니다. 양자 내성 TLS 지원은 향후에 Key Protect 명령행 인터페이스(CLI)에 추가될 예정입니다. 다음 Key Protect SDK 액세스에 대해 자세히 알아보려면,SDK 설정을 확인하십시오.

Key Protect과(와) 함께 양자 내성 TLS 사용

다음으로 요청을 전송할 때 하이브리드 및 비하이브리드 양자 내성 TLS 연결 모드 중에 선택할 수 있다. Key Protect.

양자 내성 모드 대 하이브리드 모드

Key Protect에서는 TLS 연결 중에 키를 보호하는 두 가지 모드(양자 내성 모드와 하이브리드 모드)를 지원합니다.

  • 하이브리드 모드: 하이브리드 모드는 전송 중에 데이터를 보호하기 위해 양자 내성 알고리즘과 기존의 키 교환 알고리즘의 조합을 사용합니다. 이 모드를 사용하여 요청을 작성하면 기존의 타원 알고리즘과 양자 내성 알고리즘이 키 교환 메커니즘에 사용되어 데이터가 Key Protect 서비스.

    하이브리드 모드는 다음 매개변수 세트(키 크기)를 사용하여 하이브리드 Kyber 알고리즘을 지원합니다.

    • p256_kyber512: p_256 곡선을 사용하여 kyber512와 ECDH를 결합합니다. L1 보안을 제공합니다.
    • p384_kyber768: p_384 곡선을 사용하여 kyber768과 ECDH를 결합합니다. L3 보안을 제공합니다.
    • p521_kyber1024: p_521 곡선을 사용하여 kyber1024와 ECDH를 결합합니다. L5 보안을 제공합니다.

하이브리드 알고리즘은 OQS(Open Quantum Safe) 프로젝트 커뮤니티의 안내에 따라 사용됩니다. 알고리즘 및 관련 키 크기에 대한 자세한 내용은 키 크기에 대한 자세한 내용은 다음을 참조하세요 포스트-퀀텀 및 하이브리드 키 교환 프로토타이핑을 참조하세요.

  • 양자 내성 모드: 양자 내성 모드는 전송 중에 데이터를 보호하기 위해 양자 내성 알고리즘을 사용합니다. 이 모드를 사용하여 요청을 작성하면, 양자 내성 알고리즘이 키 교환 메커니즘에 사용되어 데이터가 Key Protect 서비스.

    양자 내성 모드에서는 다음 매개변수 세트(키 크기)를 사용하여 Kyber 알고리즘을 지원합니다.

    • kyber512
    • kyber768
    • kyber1024

Kyber 알고리즘은 다음의 권장사항을 기반으로 사용됩니다. IBM Cloud. 알고리즘과 관련 키 크기에 대해 자세히 알아보려면 관련 키 크기에 대한 자세한 내용은 CRYSTALS-Kyber.

양자 내성 지원 엔드포인트

IBM® Key Protect for IBM Cloud®에는 2개 지역(US-SouthEU-GB)의 양자 내성 지원 엔드포인트가 있습니다. IBM® Key Protect for IBM Cloud® 서비스에 요청을 전송할 때 사용할 양자 내성 지원 엔드포인트를 판별하려면 다음 표를 참조하십시오.

퀀텀 세이프가 활성화된 공용 엔드포인트를 Key Protect 상호 작용할 수 있도록 나열합니다 IBM Cloud 공용 네트워크를 통한 API
지역 공용 엔드포인트
Dallas qsc.us-south.kms.cloud.ibm.com
런던 qsc.eu-gb.kms.cloud.ibm.com
프랑크푸르트 qsc.eu-de.kms.cloud.ibm.com
퀀텀 세이프가 활성화된 비공개 엔드포인트를 Key Protect 상호 작용할 수 있도록 나열합니다 IBM Cloud 프라이빗 네트워크를 통한 API
지역 사설 엔드포인트
Dallas private-qsc.us-south.kms.cloud.ibm.com
런던 private-qsc.eu-gb.kms.cloud.ibm.com
프랑크푸르트 private-qsc.eu-de.kms.cloud.ibm.com

기존 Key Protect 서비스 엔드포인트는 양자 내성이 지원되지 않습니다.

SDK를 통해 Key Protect 양자 내성 TLS 구성

전제조건

SDK 관련 작업을 수행하도록 애플리케이션을 설정하기 전에 다음 단계를 따르십시오.

  1. 다운로드 오픈 퀀텀 세이프 소프트웨어 스택(OQSSA)스크립트를 다운로드하세요. 이 스크립트는 필요한 모든 종속 항목(liboqs, openssllibcurl)을 빌드하여 HOME 디렉토리 폴더($HOME/opt/oqssa/)에 설치합니다.

  2. OQSSA 빌드에 필요한 종속 패키지가 설치되어 있는지 확인하십시오. 종속 항목 패키지를 설치하려면 sudo 권한이 필요합니다.

    • Debian(Ubuntu) 종속 항목: libtool automake autoconf cmake (3.5 or above) make openssl libssl-dev build-essential git wget golang (1.14 or above) patch perl diffutils

    Debian 배포판을 사용하는 경우 다음 코드 스니펫을 파일에 복사하고 실행하여 필요한 모든 패키지가 설치되었는지 확인합니다.

    echo "Starting prerequisites verification"
    CMAKE_VER_REQUIRED="3.*"
    packages="libtool automake autoconf cmake make openssl libssl-dev git wget build-essential golang patch perl diffutils"
    for REQUIRED_PKG in $packages
    do
        PKG_STATUS=$(dpkg-query -W --showformat='${Version},${Status}\n' $REQUIRED_PKG|grep "install ok installed")
        if [ "" = "$PKG_STATUS" ]
        then
          echo "$REQUIRED_PKG is NOT installed"
          #sudo apt-get -y install $REQUIRED_PKG
        else
          PKG_VER=$(echo $PKG_STATUS| cut -d',' -f 1)
          if [ "cmake" == $REQUIRED_PKG ]  && ! [[ $PKG_VER =~ $CMAKE_VER_REQUIRED ]]
          then
            echo "$REQUIRED_PKG Version is: $PKG_VER. OQSSA requires cmake 3.5 and above."
          fi
        fi
    done
    echo "Prerequisites verification completed"
    
    • RHEL(Centos/Fedora) 종속 항목: libtool automake autoconf cmake (3.5 or above) make openssl ncurses-devel gcc-c++ glibc-locale-source glibc-langpack-enopenssl-devel git wget golang (1.14 or above) patch perl diffutils 'Developement Tools'

    RHEL 배포판을 사용 중인 경우 다음 코드 스니펫을 파일에 복사하고 실행하여 필요한 모든 패키지가 설치되었는지 확인하십시오.

    echo "Starting prerequisites verification"
    CMAKE_VER_REQUIRED="3.*"
    packages="git libtool automake autoconf cmake make openssl  ncurses-devel gcc-c++ openssl-devel wget glibc-locale-source glibc-langpack-en sudo golang patch perl diffutils"
    for REQUIRED_PKG in $packages
    do
        PKG_STATUS=$(rpm -q --qf '%{VERSION},%{INSTALLTIME}\n' $REQUIRED_PKG)
        if [[ "$PKG_STATUS" == *"not installed"* ]];
        then
        echo "$REQUIRED_PKG is NOT installed"
        #sudo yum -y install $REQUIRED_PKG
        else
          PKG_VER=$(echo $PKG_STATUS| cut -d',' -f 1)
          if [ "cmake" == $REQUIRED_PKG ]  && ! [[ $PKG_VER =~ $CMAKE_VER_REQUIRED ]]
          then
            echo "$REQUIRED_PKG Version is: $PKG_VER. OQSSA requires cmake 3.5 and above."
          fi
        fi
    done
    PKG_STATUS=$(yum grouplist Dev* |grep "Development Tools")
    if [ "" = "$PKG_STATUS" ]
    then
        echo "Developement Tools is NOT installed"
    fi
    echo "Prerequisites verification completed"
    
  3. 전제조건 패키지가 설치되고 확인되면 OQSSA를 빌드하고 설치하는 스크립트를 실행하십시오.

    bash build-oqssa.sh
    
  4. 다음 명령을 실행하여 Quantum 라이브러리 경로를 설정하십시오.

    export LD_LIBRARY_PATH=$HOME/opt/oqssa/lib:$LD_LIBRARY_PATH
    

애플리케이션을 사용하여 Key Protect SDK 구성

필수 소프트웨어를 설치하고 나면 다음 단계를 수행하여 애플리케이션이 있는 Key Protect SDK:

  1. 다음 명령을 실행하여 이동 클라이언트가 있는 폴더로 이동하십시오.

        cd $HOME/keyprotect-go-client
    
  2. Kyber 알고리즘을 애플리케이션 코드의 Key Protect 클라이언트 초기화에서 설정하십시오. 알고리즘을 지정하지 않으면 애플리케이션이 기본값으로 p384_kyber768 알고리즘을 사용합니다. 다음 코드를 알고리즘 구성의 예로 사용하십시오.

    qscConfig := kp.ClientQSCConfig{
        AlgorithmID: kp.KP_QSC_ALGO_p384_KYBER768,
    }
    
  3. 다음 명령을 실행하여 Key Protect SDK를 컴파일하십시오.

    LD_LIBRARY_PATH=$HOME/opt/oqssa/lib PKG_CONFIG_PATH=$HOME/opt/oqssa/lib/pkgconfig go build –-tags quantum
    

CURL을 통해 양자 내성 Key Protect 엔드포인트 사용

전제조건

curl 요청을 Key Protect 양자 내성 지원 엔드포인트에 대해 작성하기 전에 다음 단계를 수행하십시오.

  1. 다운로드 오픈 퀀텀 세이프 소프트웨어 스택(OQSSA)스크립트를 다운로드하세요. 이 스크립트는 필요한 모든 종속 항목(liboqs, openssllibcurl)을 빌드하여 HOME 디렉토리 폴더($HOME/opt/oqssa/)에 설치합니다.

  2. OQSSA 빌드에 필요한 종속 패키지가 설치되어 있는지 확인하십시오. 종속 항목 패키지를 설치하려면 sudo 권한이 필요합니다.

    • Debian(Ubuntu) 종속 항목: libtool automake autoconf cmake (3.5 or above) make openssl libssl-dev build-essential git wget golang (1.14 or above) patch perl diffutils

    Debian 배포판을 사용하는 경우 다음 코드 스니펫을 파일에 복사하고 실행하여 필요한 모든 패키지가 설치되었는지 확인합니다.

    echo "Starting prerequisites verification"
    CMAKE_VER_REQUIRED="3.*"
    packages="libtool automake autoconf cmake make openssl libssl-dev git wget build-essential golang patch perl diffutils"
    for REQUIRED_PKG in $packages
    do
        PKG_STATUS=$(dpkg-query -W --showformat='${Version},${Status}\n' $REQUIRED_PKG|grep "install ok installed")
        if [ "" = "$PKG_STATUS" ]
        then
          echo "$REQUIRED_PKG is NOT installed"
          #sudo apt-get -y install $REQUIRED_PKG
        else
          PKG_VER=$(echo $PKG_STATUS| cut -d',' -f 1)
          if [ "cmake" == $REQUIRED_PKG ]  && ! [[ $PKG_VER =~ $CMAKE_VER_REQUIRED ]]
          then
            echo "$REQUIRED_PKG Version is: $PKG_VER. OQSSA requires cmake 3.5 and above."
          fi
        fi
    done
    echo "Prerequisites verification completed"
    
    • RHEL(Centos/Fedora) 종속 항목: libtool automake autoconf cmake (3.5 or above) make openssl ncurses-devel gcc-c++ glibc-locale-source glibc-langpack-enopenssl-devel git wget golang (1.14 or above) patch perl diffutils 'Developement Tools''

    RHEL 배포판을 사용 중인 경우 다음 코드 스니펫을 파일에 복사하고 실행하여 필요한 모든 패키지가 설치되었는지 확인하십시오.

    echo "Starting prerequisites verification"
    CMAKE_VER_REQUIRED="3.*"
    packages="git libtool automake autoconf cmake make openssl  ncurses-devel gcc-c++ openssl-devel wget glibc-locale-source glibc-langpack-en sudo golang patch perl diffutils"
    for REQUIRED_PKG in $packages
    do
        PKG_STATUS=$(rpm -q --qf '%{VERSION},%{INSTALLTIME}\n' $REQUIRED_PKG)
        if [[ "$PKG_STATUS" == *"not installed"* ]];
        then
        echo "$REQUIRED_PKG is NOT installed"
        #sudo yum -y install $REQUIRED_PKG
        else
          PKG_VER=$(echo $PKG_STATUS| cut -d',' -f 1)
          if [ "cmake" == $REQUIRED_PKG ]  && ! [[ $PKG_VER =~ $CMAKE_VER_REQUIRED ]]
          then
            echo "$REQUIRED_PKG Version is: $PKG_VER. OQSSA requires cmake 3.5 and above."
          fi
        fi
    done
    PKG_STATUS=$(yum grouplist Dev* |grep "Development Tools")
    if [ "" = "$PKG_STATUS" ]
    then
        echo "Developement Tools is NOT installed"
    fi
    echo "Prerequisites verification completed"
    
  3. 전제조건 패키지가 설치되고 확인되면 OQSSA를 빌드하고 설치하는 스크립트를 실행하십시오.

    bash build-oqssa.sh
    

양자 내성 지원 엔드포인트에 CURL 요청

양자 내성 지원 엔드포인트에 대한 호출을 curl 요청을 보내려면 요청을 성공적으로 통과하려면 요청이 성공적으로 처리되도록 해야 합니다. 다음 표에는 양자 내성 curl 요청을 수행할 때 필요한 플래그 목록이 포함되어 있습니다.

Key Protect 서비스에 컬 요청을 하는 데 필요한 플래그를 설명합니다.
플래그 설명
-tlsv1.3 이 플래그를 사용하면 curl이 TLS v1.3 서버에 강제로 연결됩니다.
--curves 이 플래그는 다음에서 어떤 양자 내성 알고리즘을 사용해야 하는지를 지정합니다.
TLSv1.3 키 교환 메커니즘. 알고리즘을 지정하지 않으면 기본적으로 플래그는 p384_kyber768 알고리즘으로 지정됩니다.

다음 예제 요청을 사용하여 양자 내성 지원 엔드포인트를 통해 Key Protect 인스턴스에 대한 키 목록을 검색할 수 있습니다.

$ curl --tlsv1.3 --curves <qsc_algorithm> -X GET \
    "https://qsc.<region>.kms.cloud.ibm.com/api/v2/keys" \
    -H "accept: application/vnd.ibm.kms.key+json" \
    -H "authorization: Bearer <IAM_token>" \
    -H "bluemix-instance: <instance_ID>"

다음 표에 따라 요청의 변수를 대체하십시오.

퀀텀 세이프 엔드포인트를 통해 목록 키를 요청하는 데 필요한 변수에 대해 설명합니다.
가변 설명
qsc_algorithm 필수. 전송 중인 데이터를 보호하는 데 사용되는 키 크기의 Kyber 알고리즘입니다.

승인 가능한 알고리즘 + 키 크기: kyber512, kyber768, kyber1024, p256_kyber512, p384_kyber768 및 p521_kyber1024.
지역 필수. Key Protect 인스턴스가 있는 지리적 영역을 나타내는 us-south 또는 eu-gb와 같은 지역 약어입니다.

For more information, see 지역 서비스 엔드포인트.
IAM_token 필수. 사용자의 IBM Cloud 액세스 토큰입니다. curl 요청에 Bearer 값을 포함하여 IAM 토큰의 전체 컨텐츠를 포함하십시오.

For more information, see 액세스 토큰 검색하기.
instance_ID 필수. Key Protect 서비스 인스턴스에 지정된 고유 ID입니다.

For more information, see 인스턴스 ID 검색하기.