ECIES-P256

Proposal 145
Open
Author orignal
Created 2019-01-23
Last Updated 2019-01-24

동기

ECIES-P256은 ElGamal보다 훨씬 빠릅니다. 이미 몇몇 i2pd 이프사이트에는 ECIES-P256 암호화 타입이 존재하며, Java는 이와 상호 통신이 가능해야 합니다. i2pd는 2.16.0 릴리스(0.9.32 Java)부터 이를 지원합니다.

개요

이 제안서는 식별의 인증서 부분에 나타나거나 LeaseSet2에서 별도의 암호화 키 유형으로 나타날 수 있는 새로운 암호화 유형 ECIES-P256을 소개합니다. RouterInfo, LeaseSet1 및 LeaseSet2에 사용할 수 있습니다.

ElGamal 키 위치

복습으로, ElGamal 256바이트 공개 키는 다음 데이터 구조에서 찾을 수 있습니다. 공통 구조 사양을 참조하십시오.

  • 라우터 식별 이것은 라우터의 암호화 키입니다.

  • 목적지 목적지의 공개 키는 이전에 i2cp-to-i2cp 암호화를 위해 사용되었으나 버전 0.6에서 비활성화되었으며 현재 LeaseSet 암호화를 위한 IV를 제외하고는 사용되지 않습니다. 이는 폐기될 예정입니다. LeaseSet의 공개 키 대신 사용됩니다.

  • LeaseSet 이것이 목적지의 암호화 키입니다.

위 3번에서는 ECIES 공개 키가 여전히 256바이트를 차지하지만 실제 키 길이는 64바이트입니다. 나머지는 무작위 패딩으로 채워야 합니다.

  • LS2 이것이 목적지의 암호화 키입니다. 키 크기는 64바이트입니다.

키 인증서의 EncTypes

ECIES-P256은 암호화 유형 1을 사용합니다. 암호화 유형 2와 3은 ECIES-P284 및 ECIES-P521에 예약되어야 합니다.

비대칭 암호화 사용

이 제안서는 다음에 대해 ElGamal의 대체를 설명합니다:

  1. 터널 빌드 메시지 (키는 RouterIdentity에 있음). ElGamal 블록은 512바이트입니다.

  2. 클라이언트 종단 간 ElGamal+AES/SessionTag (키는 LeaseSet에 있으며, 목적지 키는 사용되지 않음). ElGamal 블록은 514입니다.

  3. netdb 및 기타 I2NP 메시지의 라우터 간 암호화. ElGamal 블록은 514바이트입니다.

목표

  • 하위 호환성
  • 기존 데이터 구조에 대한 변경 없음
  • ElGamal보다 훨씬 더 CPU 효율적

비목표

  • RouterInfo와 LeaseSet1은 ElGamal과 ECIES-P256을 함께 게시할 수 없음

정당성

ElGamal/AES+SessionTag 엔진은 항상 태그 부족에 걸려 I2P 통신에서 성능이 극도로 저하됩니다. 터널 구축은 가장 무거운 작업이며, 원본자는 터널 빌드 요청 당 ElGamal 암호화를 3번 실행해야 합니다.

필요한 암호 원시

  1. EC P256 곡선 키 생성 및 DH

  2. AES-CBC-256

  3. SHA256

상세 제안

ECIES-P256과 함께 있는 목적지는 인증서에서 암호 유형 1로 게시됩니다. 식별 내 256바이트 중 처음 64바이트는 ECIES 공개 키로 해석되며 나머지는 무시해야 합니다. LeaseSet의 별도 암호화 키는 식별에서의 키 유형을 기반으로 합니다.

ElGamal/AES+SessionTags용 ECIES 블록

ECIES 블록은 ElGamal/AES+SessionTags를 위한 ElGamal 블록을 대체합니다. 길이는 514바이트입니다. 257바이트씩 두 부분으로 구성됩니다. 첫 번째 부분은 0으로 시작하고, 그 후 P256 임시 공개 키 64바이트이며 나머지 192바이트는 무작위 패딩입니다. 두 번째 부분은 0으로 시작하고, 그 후 AES-CBC-256 암호화된 256바이트가 ElGamal과 동일합니다.

터널 빌드 레코드용 ECIES 블록

터널 빌드 레코드는 동일하지만 블록의 선행 0이 없습니다. 터널은 라우터의 암호화 유형의 조합을 통해 이루어질 수 있으며 레코드마다 수행됩니다. 터널의 원본은 터널 참가자의 게시된 암호화 유형에 따라 레코드를 암호화하며, 참가자는 자신의 암호화 유형에 따라 해독합니다.

AES-CBC-256 키

이는 KDF가 x 좌표에 대해 SHA256인 ECDH 공유 키 계산입니다. Alice가 암호화자이고 Bob이 해독자라고 가정합니다. k는 Alice의 임시 P256 개인 키이며 P는 Bob의 공개 키라고 가정합니다. S는 공유 비밀 S(Sx, Sy)입니다. Alice는 k를 P와 “합의"하여 S를 계산합니다, 예: S = k*P.

K는 Alice의 임시 공개 키이며 p는 Bob의 개인 키라고 가정합니다. Bob은 수신한 메시지의 첫 번째 블록에서 K를 꺼내 S = p*K를 계산합니다.

AES 암호화 키는 SHA256(Sx)이고 iv는 Sy입니다.