16.7.4.2 공개 키(PublicKey) 기반의 마이크로초 컷 단일 서명 위조 룩업 결재 기법

16.7.4.2 공개 키(PublicKey) 기반의 마이크로초 컷 단일 서명 위조 룩업 결재 기법

거대 분산통신 메쉬(Zenoh)에서 JWT(JSON Web Token) 모델을 차용하여 외부 DB 통신 의존성을 소거했다 한들(16.7.4.1장 참조), 인증 코어 스레드에는 레이턴시(Latency)를 유발하는 극독 하나가 남는다.
JWT 토큰의 서명(Signature)을 수학적으로 검증하는 C++ / Rust 코드 로직 그 자체다. 비대칭 키(RSA-256, ECDSA) 연산은 본질적으로 무거운 암호학 행렬곱의 집합체다.

만일 라우터 데몬에 악의적인 봇넷(Botnet)이 초당 1만 번씩 쓰레기(위조된) JWT 토큰을 들이밀며 소켓 접속을 시도한다면, 우리의 라우터는 매번 착실하게 공개키(PublicKey)를 꺼내서 그 가짜 서명을 검증해 보느라 CPU 자원을 99% 모조리 탕진해 버린다(CPU Exhaustion DoS).
본 절에서는 무거운 비대칭 키 서명 연산의 목을 강제로 비틀어, CPU 사이클 낭비를 O(1) 해시 메모리 대조로 폭압 치환 시켜버리는 단일 서명 캐싱 룩업(Signature Single-Caching Look-up) 폭거를 갈파한다.

1. 정직한 비대칭 키(Asymmetric Key) 연산의 치명적 속도

ES256(Elliptic Curve) 알고리즘으로 JWT 토큰 헤더와 페이로드를 검사하는 건, C 컴파일러 단에서 대략 수십 밀리초(ms)를 잡아먹는 헤비급 연산이다.

  • 정상 궤도: 로봇이 접속한다 \rightarrow 10ms 소요하여 검증 \rightarrow 합격. 연결 완료.
  • 해킹 궤도: 해커가 무한루프로 “접속 \rightarrow 가짜 JWT 제시” 를 도배한다 \rightarrow 데몬은 매번 10ms 짜리 방어 연산을 하느라 정작 기존 연결된 자율주행 데이터 라우팅을 멈춰 세운다!

암호학(Cryptography) 계산을 방어막으로 쓴다는 건, 역으로 그 무거운 계산 자체가 해커(Attacker)가 노리는 가장 맛있는 CPU 타격 지점(Denial of Service Vector)이 된다는 파멸적 모순이다.

2. 결재 메모리 이원화: 서명 룩업 장부(Look-up Table) 강제 주입

아키텍트는 인증 코드가 비대칭 암호 공식을 실행시키기 직전의 최전선(Front-line)에 가장 멍청하고 가장 빠른 O(1) 메모리 해시맵(Hash Map) 방벽을 대못으로 박아넣는다.

로봇 생태계에서 로봇들이 들고 있는 진짜 JWT 토큰의 문자열 생김새 자체는 만료(Expiration) 전까지 1주일간 변하지 않는 상숫값(Constant String)이다!
따라서 최초 1회만 힘들게 비대칭 수학 공식으로 “위조 여부“를 판독하고, 그 판독 결과 자체를 메모리에 통째로 캐싱(Caching)해 버리면 된다.

// [마이크로초 컷 CPU 척살 방어막 런북]

// 메모리에 상주하는 통행증 캐시 (Key: JWT 토큰 풀스트링, Value: 인증 적격 여부)
std::unordered_map<std::string, bool> jwt_signature_cache;

bool check_jwt_auth(const std::string& token) {
    // 1. O(1) 해시 비교의 철권 타격! 
    if (jwt_signature_cache.find(token) != jwt_signature_cache.end()) {
        return jwt_signature_cache[token]; // 무거운 RSA 연산? 개나 줘버려라! 여기서 즉답!
    }
    
    // 2. 캐시에 없는, 태어나서 처음 보는 이상한 놈이 왔다!
    // 이때 비로소 10ms 의 무거운 타원곡선(ECDSA) 비대칭 검증 연산(verify)을 돌린다!
    bool is_valid = heavy_rsa_verify_with_public_key(token);
    
    // 3. 그리고 그 판결 결괏값을 무조건 장부(Cache)에 박제!
    jwt_signature_cache[token] = is_valid;
    return is_valid;
}

3. 위조(Spoofing) 공격의 즉각 무력화 와 스루풋 구원

Signature Cache Loop 논리막 하나가 덧대어짐으로써, 시스템 방어망 위상은 기괴하게 뒤집힌다.

  • 해커의 공격 A (동일한 가짜 토큰 무한 도배 시): 첫 1회 타격만 라우터가 10ms 계산 후 False 로 장부에 각인한다. 이후 초당 1만 번 날아오는 나머지 똑같은 가짜 토큰들은, 공개키 연산장 근처도 못 가보고 0.001ms 컷으로 입구 컷 파쇄(Drop) 당한다. 타격 데미지 소멸.
  • 해커의 공격 B (무작위로 글자를 계속 바꾼 가짜 토큰 무한 생성 시): 이를 방어하기 위해 아키텍트는 저 unordered_map의 최대 사이즈(Capacity)를 고정시키고, 허가받지 못한 쓰레기 키는 1분 뒤 메모리에서 휘발시키는 LRU (Least Recently Used) 캐시 소각 메커니즘을 튜닝해둔다.

비대칭 키(PublicKey)의 견고한 수학적 절대성은 단 1% 도 손상하지 않되, 그 무거운 수학을 매번 계산하려는 시스템 엔지니어링의 정직한 결벽증을 버리는 파괴적 선택. 가장 엄중한 결재 증명서조차 단 1회의 선고(First Trial) 뒤에는 문자열 일치(String Equal)라는 가장 천박한 비교 도구의 결과 테이블로 나태하게 압살 시켜버리는 이것이 극도의 지연(Latency) 압박을 견뎌내는 1티어 분산 방어 아키텍처의 맨얼굴이다.