From 31129ce60c1d614920c7baac3fffc2dba1609131 Mon Sep 17 00:00:00 2001 From: cheoljun99 Date: Fri, 29 May 2026 21:56:15 +0900 Subject: [PATCH 1/3] =?UTF-8?q?edit=20:=20protocol=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/protocol/comm_header.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/include/protocol/comm_header.h b/include/protocol/comm_header.h index ae75042..c883dc8 100644 --- a/include/protocol/comm_header.h +++ b/include/protocol/comm_header.h @@ -8,6 +8,7 @@ enum class TypeFlag : uint8_t { NONE = 0x00, // 0000 0000 일반 전송 (fire and forget) RELIABLE = 0x01, // 0000 0001 신뢰성 전송 (stop and wait arq) BIG_DATA = 0x02, // 0000 0010 대용량 데이터 (chunked transfer with reassembly) + SECURE = 0x04, // 0000 0100 보안 통신 (암호화) // 0x04 향후 확장가능 }; @@ -18,6 +19,13 @@ enum class ReliableFlag : uint8_t { // 0x04 향후 확장가능 }; +enum class SecureFlag : uint8_t { + REQUEST = 0x00, // 0000 0000 암호화 채널 형성 요청 + RESPONSE = 0x01, // 0000 0001 암호화 채널 형성 응답 + ENCRYPTED = 0x02, // 0000 0010 암호화 데이터 + // 0x04 향후 확장가능 +}; + #pragma pack(push, 1) struct BaseHeader { DeviceId src_device_id; // 출발지 디바이스 ID @@ -35,6 +43,12 @@ struct ReliableExHeader { ReliableFlag flags; //신뢰성 통신 유형 플래그 (DATA, ACK) }; +struct SecureExHeader { + uint32_t secure_channel_unique_key; + //보안 통신을 위한 디바이스 고유키 + SecureFlag flags; //보안 통신 유형 플래그 (REQUEST, RESPONSE, ENCRYPTED) +}; + struct BigDataExHeader { uint32_t message_id; // 큰 메시지의 고유 ID uint32_t total_data_length; // 원본 페이로드 전체 크기 From 1384d79fe7c69735361d66e9314a4d1a0b8e0fb3 Mon Sep 17 00:00:00 2001 From: cheoljun99 Date: Thu, 4 Jun 2026 03:38:23 +0900 Subject: [PATCH 2/3] =?UTF-8?q?edit=20=ED=86=B5=EC=8B=A0=EC=B1=84=EB=84=90?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/protocol/comm_header.h | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/include/protocol/comm_header.h b/include/protocol/comm_header.h index c883dc8..0465e27 100644 --- a/include/protocol/comm_header.h +++ b/include/protocol/comm_header.h @@ -9,20 +9,19 @@ enum class TypeFlag : uint8_t { RELIABLE = 0x01, // 0000 0001 신뢰성 전송 (stop and wait arq) BIG_DATA = 0x02, // 0000 0010 대용량 데이터 (chunked transfer with reassembly) SECURE = 0x04, // 0000 0100 보안 통신 (암호화) - // 0x04 향후 확장가능 + // 0x08 향후 확장가능 }; enum class ReliableFlag : uint8_t { DATA = 0x00, // 0000 0000 신뢰성 데이터 ACK = 0x01, // 0000 0001 ACK // 0x02 향후 확장 - // 0x04 향후 확장가능 }; enum class SecureFlag : uint8_t { REQUEST = 0x00, // 0000 0000 암호화 채널 형성 요청 RESPONSE = 0x01, // 0000 0001 암호화 채널 형성 응답 - ENCRYPTED = 0x02, // 0000 0010 암호화 데이터 + ENCRYPT = 0x02, // 0000 0010 암호화 데이터 // 0x04 향후 확장가능 }; @@ -43,12 +42,32 @@ struct ReliableExHeader { ReliableFlag flags; //신뢰성 통신 유형 플래그 (DATA, ACK) }; -struct SecureExHeader { - uint32_t secure_channel_unique_key; - //보안 통신을 위한 디바이스 고유키 - SecureFlag flags; //보안 통신 유형 플래그 (REQUEST, RESPONSE, ENCRYPTED) +struct SecureDataExHeader { + SecureFlag flags; // 보안 통신 유형 플래그 (ENCRYPTED) + uint8_t nonce[12]; // AES-GCM 복호화에 필요한 nonce (매 패킷마다 랜덤 생성) + uint8_t tag[16]; // AES-GCM 무결성 검증 태그 +}; + +struct SecureRequestExHeader { + SecureFlag flags; // 보안 통신 유형 플래그 (REQUEST) + uint8_t modulus[256]; // 자신의 RSA 공개키 모듈러스 N (2048bit) + uint8_t public_exponent[3]; // 자신의 RSA 공개 지수 E + uint8_t signature[256]; + // RSA_서명(SHA256(modulus + public_exponent), 자신의 개인키) }; +struct SecureResponseExHeader { + SecureFlag flags; // 보안 통신 유형 플래그 (RESPONSE) + uint8_t modulus[256]; // 자신의 RSA 공개키 모듈러스 N (2048bit) + uint8_t public_exponent[3]; // 자신의 RSA 공개 지수 E + uint8_t encrypt_session_key[256]; + // RSA_암호화(세션키, 상대의 modulus + public_exponent) + // 상대방의 공개키로 암호화하여 세션키 전달 (상대방의 개인키로만 복호화 가능) + uint8_t signature[256]; + // RSA_서명(SHA256(modulus + public_exponent + encrypt_session_key), 자신의 개인키) +}; + + struct BigDataExHeader { uint32_t message_id; // 큰 메시지의 고유 ID uint32_t total_data_length; // 원본 페이로드 전체 크기 From d75e6c8070941951061273e34c9b08cc269762d8 Mon Sep 17 00:00:00 2001 From: cheoljun99 Date: Thu, 4 Jun 2026 03:42:23 +0900 Subject: [PATCH 3/3] =?UTF-8?q?edit=20=ED=86=B5=EC=8B=A0=EC=B1=84=EB=84=90?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/protocol/comm_header.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/protocol/comm_header.h b/include/protocol/comm_header.h index 0465e27..d0c2e2e 100644 --- a/include/protocol/comm_header.h +++ b/include/protocol/comm_header.h @@ -15,7 +15,7 @@ enum class TypeFlag : uint8_t { enum class ReliableFlag : uint8_t { DATA = 0x00, // 0000 0000 신뢰성 데이터 ACK = 0x01, // 0000 0001 ACK - // 0x02 향후 확장 + // 0x02 향후 확장가능 }; enum class SecureFlag : uint8_t {