KRW | USD

블록체인 응용 분야의 보안 구축: 2부 – 턴키 솔루션을 통한 신속한 개발

작성자: Stephen Evanczuk

Digi-Key 북미 편집자 제공

편집자 주: 블록체인의 세부 기술 및 거래 방법은 복잡합니다. 2부로 구성된 이 시리즈의 1부에서는 블록체인의 구조와 거래 공정을 간략하게 설명합니다. 또한 개인 키 보호가 블록체인 보안의 핵심인 이유를 설명하는 맥락을 제공하고 개인 키 보호를 위한 턴키 솔루션을 소개합니다. 그리고 2부에서는 개발자가 이 턴키 하드웨어 기반 솔루션을 통해 블록체인 거래를 보다 쉽게 보호할 수 있는 방법을 보여줍니다.

블록체인 기술은 암호 화폐에서 친숙하게 사용되는 것 외에도 개발자에게 폭넓은 분야에 적용 가능한 보안 인프라를 제공할 수 있습니다. 분산식 아키텍처이므로 별도의 중앙 기관이 필요하지 않으며, 개인 키와 암호화 방법을 사용하여 당사자 간의 교환과 자산을 보호할 수 있습니다. 결과적으로 블록체인 시스템의 보안은 키 보안과 강력한 알고리즘을 얼마나 적절하게 사용하느냐에 따라 크게 달라집니다.

알고리즘은 즉시 적절하게 사용할 수 있지만 보안 솔루션을 개발하고 대상 응용 분야에 통합하는 등 구현에는 많은 전문 지식과 경험이 필요합니다. 개발자가 응용 제품의 핵심에 블록체인을 구축하는 데 적절한 도구를 제공하지 않는다면 노력이 무의미해지거나 사이버 위협에 취약해질 수 있습니다.

이 기사에서는 개발자가 Infineon Technologies의 블록체인 보안을 위한 턴키 하드웨어 기반 솔루션을 사용하여 블록체인 거래를 쉽게 보호할 수 있는 방법을 보여줍니다.

개인 키 보안

블록체인에서는 거래 승인을 위한 중앙 기관이 필요하지 않습니다. 대신 이 기술에서는 합의 메커니즘에 따라 암호화 및 개인/공용 키 쌍을 사용하여 서명 및 확인되는 거래를 통해 지속적으로 확장되는 블록체인의 무결성을 유지합니다. 실제로 개인 키는 블록체인 시스템에서 소유권 자격 증명 역할을 합니다. 사고 또는 도난을 통해 개인 키가 분실되거나 노출될 경우 중요한 암호 화폐를 잃게 됩니다. 따라서 개인 키 보안은 블록체인 응용 제품을 배포하는 데 있어서 가장 중요한 문제입니다.

소프트웨어 또는 제한된 하드웨어 보안을 기반으로 하는 이전 방식에서는 개인 키가 광범위한 공격에 취약하게 노출될 수 있습니다. 이에 반해 강력한 솔루션은 다양한 직간접 위협으로부터 세부적으로 보호하도록 설계된 보안 컨트롤러를 기반으로 구축됩니다. 이러한 유형의 보안 컨트롤러 기반 솔루션을 사용하여 Infineon Blockchain Security 2Go 시험용 키트(BLOCKCHAINSTARTKITTOBO1)는 블록체인 보안에 필요한 심층 보호 기능을 제공합니다.

개발자는 힘들게 자체 솔루션을 구현하는 대신 블록체인을 확장하는 중요한 첫 번째 단계인 거래 서명을 비롯한 블록체인 보안 메커니즘 지원 기능이 내장된 무접촉 스마트 카드를 제공할 수 있습니다(그림 1).

Infineon의 Blockchain Security 2Go 스마트 카드 구성도그림 1: Infineon Blockchain Security 2Go 스마트 카드는 블록체인을 확장하는 데 사용되는 거래 서명을 비롯한 블록체인 메커니즘 지원 기능을 내장하여 블록체인 보안 배포를 단순화합니다. (이미지 출처: Infineon Technologies)

보안 플랫폼

Infineon Blockchain Security 2Go 시험용 키트는 블록체인 시스템 통합업체에 보안 장치를 구입할 때 일반적으로 요구되는 비공개 계약이 필요하지 않은 턴키 보안 솔루션을 제공합니다.

Infineon의 오픈 소스 소프트웨어를 사용하여 신속하게 배포하도록 고안된 이 키트에는 보안 키 생성, 서명 생성, PIN 인증을 비롯한 핵심 블록체인 메커니즘을 구현하는 5개 스마트 카드가 포함되어 있습니다. 관련 Infineon Security 2Go 10 카드 패키지(BLOCKCHAIN10CARDSTOBO1)는 개발자에게 추가 스마트 카드 소스를 제공합니다.

이 카드는 일부 지역에서 기존 지불 카드 및 ID 카드에 사용되는 ISO/IEC 7810 ID-1 표준을 준수합니다. 스마트 카드는 NFC(근거리 무선 통신)를 사용하는 무접촉 카드 연결을 위해 ISO/IEC 14443 기반 클래스 1 안테나를 통합합니다.

각 카드에 내장된 보안 컨트롤러는 최대 255개 개인/공용 키 쌍을 생성 및 보관하고 암호화 알고리즘을 실행하는 데 적합한 하드웨어 기반 보안을 제공합니다. 통합 난수 생성기(TRNG)와 함께 이 카드는 비트코인, 이더리움 등과 같은 암호 화폐에 일반적으로 사용되는 secp256k1 ECC 곡선과 함께 사전 로드되는 256비트 고급 암호화 표준(AES)을 사용하는 대칭 암호화와 256비트 타원 곡선 암호화(ECC)를 사용하는 비대칭 암호화 모두에 적합한 알고리즘을 지원합니다.

블록체인 보안 메커니즘 전용 지원과 함께 이 카드는 블록체인 거래를 즉각적으로 보호하는 솔루션을 제공합니다. 보안 서명 방법을 구축하는 데 시간을 소비하는 대신 블록체인 시스템 통합업체에서는 사용자의 스마트 카드를 사용하여 배포된 블록체인 시스템과 간단히 상호 작용할 수 있습니다.

간편한 상호 작용

사용자는 스마트 카드를 사용하여 개인 키를 완벽하게 보호하면서 블록체인 거래를 직접 수행할 수 있습니다. 이 카드는 독립형 NFC 스마트 카드 판독기가 설치된 NFC 스마트폰 또는 컴퓨터와 같은 인터페이스 장치에서 실행 중인 소프트웨어와 함께 작동하도록 설계되었습니다. 블록체인 응용 제품을 실행하는 동안 사용자는 인터페이스 장치에 카드를 저장하여 카드 기능을 활성화합니다(그림 2).

Google Pixel 스마트폰 후면의 NFC 판독기 이미지그림 2: 사용자는 이 그림과 같이 Google Pixel 스마트폰 후면의 광택 영역과 같은 NFC 판독기 안테나 근처로 카드를 이동하여 스마트 카드 기능을 호출합니다. (이미지 출처: Infineon Technologies)

Security 2Go 스마트 카드를 즉석에서 평가하도록 Infineon은 일반적인 시나리오에서 카드 사용을 시연하는 Android 모바일 앱을 제공합니다. 모바일 앱을 NFC 지원 스마트폰에서 시작하면 카드를 스마트폰의 NFC 안테나 영역으로 이동하여 전체 모바일 앱 인터페이스를 활성화하도록 사용자를 초대합니다(그림 3).

Blockchain Security 2Go 시험용 키트의 Coinfinity GmbH 구성도그림 3: Blockchain Security 2Go 시험용 키트로 Coinfinity GmbH에서 개발되어 사전 빌드된 Android 앱은 카드에서 스마트 카드 접촉을 요청한 후(왼쪽) 스마트 카드 기능을 사용하여 다양한 사용 시나리오를 시연하는 방법(오른쪽)을 보여줍니다. (이미지 출처: Infineon Technologies)

스마트폰 또는 다른 인터페이스 장치에 있는 이 모바일 앱 및 기타 배포 프로그램의 백그라운드에서 실행 중인 소프트웨어는 명령을 실행하여 새로운 키 쌍 생성, 기존 키 쌍에 대한 정보 가져오기 등과 같은 기능을 수행합니다. 이러한 명령 시퀀스에서 개인 키로 스마트 카드를 종료할 수 없습니다. 개인 키를 포함하는 명령에 응답하여 스마트 카드는 인터페이스 장치에 키 핸들을 반환합니다. 즉, 인터페이스 장치 소프트웨어에서는 이 핸들을 사용하여 관련 명령(예: 특정 개인 키와 연결된 공용 키 검색)을 실행합니다(그림 4).

이러한 방법으로 인터페이스에서 실행 중인 소프트웨어는 보안 데이터를 훼손하지 않고 블록체인 시스템과 상호 작용하는 데 필요한 작업을 완료할 수 있습니다.

Infineon의 Blockchain Security 2Go 스마트 카드에 대한 키 생성 요청 구성도그림 4: 스마트폰 또는 스마트 카드 판독기와 같은 인터페이스 장치는 Infineon Blockchain Security 2Go 스마트 카드에 대한 이 키 생성 요청과 같은 명령을 실행하여 개인/공용 키 쌍을 생성하고 개인 키를 노출하지 않고 공용 키를 반환합니다. (이미지 출처: Infineon Technologies)

인터페이스 장치 소프트웨어는 응용 분야별 기능(예: 각 거래에 사용되는 블록체인 주소(일반적으로 고유함)로 공용 키 전송)을 수행합니다. 예를 들어 비트코인 주소에서는 단방향 해싱 알고리즘에 대한 입력으로 공용 키를 사용합니다. 단방향 해싱 알고리즘에서는 공용 키에 따라 다른 주소를 생성하지만, 이 알고리즘을 사용하여 공용 키를 다시 생성할 수는 없습니다.

거래 요청에 서명하기 위해 인터페이스에서는 비슷한 방식으로 명령을 실행하고 해당 해시 결과를 스마트 카드에 전송합니다. 이에 대응하여 스마트 카드는 서명을 인터페이스 장치에 반환합니다(그림 5).

Infineon의 Blockchain Security 2Go 스마트 카드 서명 구성도그림 5: 거래에 서명하려면 개인 키를 사용해야 하지만 Infineon Blockchain Security 2Go 스마트 카드를 사용하면 인터페이스 장치가 모든 중요한 개인 키를 노출하지 않고 서명을 수신합니다. (이미지 출처: Infineon)

APDU(Application Protocol Data Unit)

각 명령 및 응답에 대해 인터페이스 장치와 스마트 카드는 ISO/IEC 7816 표준의 4부에 정의된 APDU(Application Protocol Data Unit)를 사용하여 상호 작용합니다. 스마트 카드와 상호 작용할 때마다 인터페이스에서는 ISO/IEC-7816 표준 명령 APDU 형식으로 서비스 요청을 실행하고 표준 응답 APDU 형식으로 (선택적) 응답을 수신합니다(그림 6).

명령 APDU 및 응답 APDU에 대한 ISO/IEC 7816 표준 형식 표그림 6: 인터페이스 장치와 규격 스마트 카드(예: Infineon Blockchain Security 2Go 스마트 카드) 간 통신은 명령 APDU 및 응답 APDU에 대한 ISO/IEC 7816 표준 형식을 기반으로 합니다. (이미지 출처: Infineon Technologies)

명령 APDU에서 지원되는 명령과 파라미터는 스마트 카드 제공업체에서 대상 응용 분야에 사용되는 산업 표준에 따라 정의합니다. Blockchain Security 2Go 스마트 카드의 경우 Infineon에서 스마트 카드의 기능을 활용하는 데 필요한 핵심 명령 세트를 정의합니다(표 1).

Infineon의 Blockchain Security 2Go 스마트 카드를 위한 명령 세트 표표 1: Infineon의 Blockchain Security 2Go 스마트 카드를 위한 명령 세트 (표 출처: Digi-Key Electronics에서 Infineon Technologies 데이터를 기준으로 작성)

예를 들어 새로운 세션을 시작하기 위해 인터페이스 장치 소프트웨어는 Infineon에서 Blockchain Security 2Go 시험용 키트용으로 제공한 고정 응용 제품 식별자(AID)를 위한 데이터 값을 사용하여 SELECT APPLICATION 명령 APDU를 구성합니다. 명령 APDU를 수신한 후 스마트 카드는 새로운 세션에 맞게 초기화한 후 일부 스마트 카드 메타데이터를 포함하는 응답 APDU를 전송합니다(그림 7).

명령에 필요한 Infineon 특정 APDU 필드 값 표그림 7: Blockchain Security 2Go 스마트 카드의 경우 Infineon에서는 명령 및 응답에 필요한 특정 APDU 필드 값과 오류 코드를 제공합니다(예: 스마트 카드 초기화를 위한 이 세트). APDU에는 Infineon에서 제공한 고정 응용 제품 식별자(AID)가 포함되어 있습니다. (이미지 출처: Infineon Technologies)

맞춤형 소프트웨어

개발자는 Blockchain Security 2Go 스마트 카드를 사용하여 새 응용 제품을 제작할 때 이 하위 수준에서 작업할 필요가 없습니다. Blockchain Security 2Go GitHub 리포지토리에는 Infineon에서 제공하는 스마트 카드 사용에 관한 샘플 응용 제품 및 설명서가 포함되어 있습니다.

Infineon은 Android 모바일 앱을 위한 전체 Java 소스 코드를 BlockchainSecurity2Go Android 코드 GitHub 리포지토리에 포함합니다. 이 코드 베이스를 활용하여 소프트웨어 프로그래머는 스마트 카드 세션 초기화(selectApplication()), 스마트 카드에서 공용 키 읽기(readPublicKeyFromCard()), 새 키 쌍 생성(generateNewSecp256K1Keypair())(공용 키가 카드에 아직 없는 경우) 등 키 설계 패턴을 빠르게 학습할 수 있습니다(목록 1).

복사     /**      * Read public key from card, or create a new one if it doesn't exist yet.
     *      * @param card nfc card      * @return public key as hexadecimal String      * @throws IOException      on communication errors      * @throws NfcCardException when card returns something other than 0x9000 or 0x61XX      */     public static GetKeyInfoResponseApdu readPublicKeyOrCreateIfNotExists(NfcTranceiver card, int keyIndex)             throws IOException, NfcCardException {         try {             selectApplication(card);             // try to read public key             return readPublicKeyFromCard(card, keyIndex);         } catch (NfcCardException e) {             // if Public key is not available yet (Status words: 0x6A88)             if (e.getSw1Sw2() == SW_KEY_WITH_IDX_NOT_AVAILABLE) {                 int newKeyIndex;                 do {                     // create a new keypair                     newKeyIndex = generateNewSecp256K1Keypair(card);                 } while (newKeyIndex <= keyIndex);                 // and ask for the pubkey of the newly created keypair                 return readPublicKeyFromCard(card, newKeyIndex);             } else {                 // throw all other exceptions to our caller                 throw e;             }         }     } 

목록 1: Infineon은 공용 키 읽기, 새 개인/공용 키 쌍 생성과 같은 기본 상호 작용을 보여주는 Blockchain Security 2Go Android 앱을 위한 전체 소스 코드를 제공합니다. (코드 출처: Infineon Technologies)

Java 코드 베이스의 유틸리티 클래스에서는 SELECT APPLICATION APDU 생성과 같은 세부 상호 작용을 구현합니다. 목록 2(아래)에 표시된 구성원 함수를 호출하는 루틴은 패키지의 앞부분에 다음과 같이 선언된 Infineon Blockchain Security 2Go AID를 보유한 aid 파라미터를 전달합니다.

복사         public static final byte[] AID_INFINEON_BLOCKCHAIN2GO = fromHexString("D2760000041502000100000001");   public class SelectApplicationApdu extends BaseCommandApdu {       /**      * Instruction byte for SELECT APPLICATION operation.
     */     private static final int INS_SELECT_APPLICATION = 0xA4;       /**      * Constructs a SELECT APPLICATION command apdu.
     */     public SelectApplicationApdu(byte[] aid) {         this.ins = INS_SELECT_APPLICATION;         this.p1 = 0x04;         this.setData(aid);         this.leIncluded = true;     }   } 

목록 2: Infineon Blockchain Security 2Go Android 앱 소스 배포에서는 스마트 카드 초기화를 위한 명령 APDU 생성 방법을 보여줍니다. (코드 출처: Infineon Technologies)

또한 빠른 개발을 위해 Infineon에서는 Blockchain Security 2Go Python 라이브러리와 이 라이브러리를 기반으로 구축된 명령줄 인터페이스를 제공합니다. Java 버전과 마찬가지로 Python 코드는 키 쌍 생성과 같은 스마트 카드 작업을 실행하는 데 필요한 간단한 설계 패턴을 보여줍니다(목록 3).

복사 def select_app(reader):     """ Sends command to select the Blockchain Security2GO application       Needs to be called after reset to allow for access to     blockchain commands.
      Returns:         :obj:`tuple`: (pin_active, card_id, version).
                pin_active:             bool: True if PIN is set on the card                 card_id:             bytes: 10 byte unique card identifier                 version:             str: card firmware version, following             semantic versioning.
        Raises:         CardError: If card indicates a failure.
                Any exceptions thrown by the reader wrapper are passed through.
"""     logger.debug('SELECT Blockchain Security 2Go starter kit')     aid = bytes.fromhex('D2760000041502000100000001')     r = reader.transceive(b'\x00\xA4\x04\x00', aid).check()       pin_active = True if r.resp[0] == 1 else False     card_id = r.resp[1:11]     version = r.resp[11:].decode('ASCII')     return (pin_active, card_id, version)   def generate_keypair(reader):     """ Sends command to generate new keypair       A new keypair is generated and stored. The ID identifying this     keypair is returned. A key using the `secp256k1`_ curve is generated.
      Args:         reader (:obj:): object providing reader communication       Returns:         int: ID of the just generated keypair, to be used e.g. for         future signatures using ``generate_signature``         Raises:         CardError: If card indicates a failure, e.g. if card is full.
                Any exceptions thrown by the reader wrapper are passed through.
        .. _secp256k1:         http://www.secg.org/sec2-v2.pdf     """     logger.debug('GENERATE KEYPAIR')     r = reader.transceive(b'\x00\x02\x00\x00').check()       key_id = int(r.resp[0])     logger.debug('generated key %d', key_id)     return key_id 

목록 3: Infineon Blockchain Security 2Go Python 라이브러리와 해당 명령줄 인터페이스는 스마트 카드 상호 작용을 위한 기본 설계 패턴을 보여주는 전체 서비스 루틴(예: Blockchain Security 2Go 스마트 카드 초기화를 위한 select_app() 함수, generate_keypair())을 활용하여 빠르게 개발할 수 있도록 도와줍니다. (코드 출처: Infineon Technologies)

특정 Pythonic 면에서 Blockchain Security 2Go Python 라이브러리는 즉시 사용 가능한 제3자 모듈을 기반으로 작성됩니다. 특히, Infineon 라이브러리에서는 자체 클래스 정의로 함수를 랩핑하는 주요 pyscard 모듈을 사용합니다. 예를 들어 Blockchain Security 2Go Python 라이브러리에서는 개인용 컴퓨터/스마트 카드(PC/SC) 판독기를 찾아서 스마트 카드 세션을 시작합니다. Blockchain Security 2Go Python 라이브러리의 기본 blocksec2go 모듈의 경우 pyscard 함수를 랩핑하는 라이브러리 클래스의 구성원 함수인 open_psycard() 함수를 사용하여 이 검색을 수행합니다(목록 4).

복사 class PySCardReader:     """ Wrapper to use PyScard with blocksec2go         Abstracts communication into a simple function     """     def __init__(self, connection):         self.connection = connection         self.connection.connect()         def transceive(self, header, data = b'', le = -1):         apdu = Apdu(header, data, le)         logger.debug(apdu)         resp = self._transceive(bytes(apdu))         logger.debug(resp)         return resp       def _transceive(self, data):         resp, sw1, sw2 = self.connection.transmit(array.array('b', data).tolist())         return ApduResponse(array.array('B', resp).tobytes(), (sw1 << 8) + sw2) 

목록 4: Infineon Blockchain Security 2Go Python 라이브러리에서는 구성원 함수로 pyscard 함수를 호출하여 이 클래스의 제3자 pyscard 모듈로 상호 작용을 랩핑합니다. (코드 출처: Infineon Technologies)

결론

블록체인 기술은 정보의 무결성 또는 진위성을 손상하지 않으면서 정보에 대한 접근성을 확대하는 프레임워크를 제공합니다. 중앙 기관에 의존하는 대신 블록체인 시스템에서는 암호화를 사용하여 거래를 확인하고 수정하지 못하도록 보호합니다. 이 접근 방식의 중심이 되는 개인 키는 사용자 거래에 대한 제어권을 잃지 않고 블록체인 시스템이 손상되는 것을 방지하기 위해 강력한 보안 메커니즘이 필요합니다.

그림과 같이 해당 오픈 소스 소프트웨어를 사용하여 Infineon Blockchain Security 2Go 시험용 키트에서는 블록체인 시스템 통합업체를 위한 즉석 보안 솔루션을 제공하고, 사용자를 위해 블록체인 거래를 더 안전하고 간단히 실행할 수 있는 방법을 제공합니다.

면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 Digi-Key Electronics의 의견, 생각 및 견해 또는 Digi-Key Electronics의 공식 정책과 관련이 없습니다.

작성자 정보

Stephen Evanczuk

Stephen Evanczuk는 전자 산업에 관해 하드웨어, 소프트웨어, 시스템, 응용 제품(예: IoT)을 비롯한 광범위한 주제에 대해 20년 이상 집필한 경력을 갖고 있습니다. 그는 신경 과학의 뉴런 네트워크 박사 학위를 받았으며항공 우주 산업 분야의 광범위하게 분포된 보안 시스템 및 알고리즘 가속 메서드 관련 업무를 수행했습니다. 현재, 기술 및 엔지니어링에 대해 기사를 쓰지 않을 때에는 인식 및 추천 시스템에 대한 심층적 학습 응용 프로그램을 연구하고 있습니다.

게시자 정보

Digi-Key 북미 편집자