2번 모듈 신규(raspberry_pi4_sht30/): SHT30 온습도 → cafe24, raw-body X-Signature HMAC, 폐쇄망 오프라인 설치(vendor/install), systemd, CRC/포맷 자가점검. firmware sht30_fw wire 포맷과 byte-parity 검증. 1번 모듈 통합(raspberry_pi4/): 누수+카메라를 동일 서버로. 레거시 sha256(key+json) body-sig → X-Signature HMAC 전환, 사진 canonical=device_id|sensor_id|log_id|timestamp. 서버 통합(php/): api/sensor_data.php 누수 이벤트 수신, api/photo_upload.php 신규(HMAC·finfo·서버생성 파일명·nonce 멱등·sensor 결속), photo.php 인증 사진서빙, dashboard.php 누수 패널+사진, sms_send.php 누수 SMS, config.php 태그/요약. DB: sql/migration_add_leak.sql(가산·멱등), schema_sht30.sql 통합 스키마. 보안 하드닝(외부 펜테스트 대비, 확정 CRITICAL/HIGH 0): cron_heartbeat api_key fail-closed, setup_mfa 부트스트랩 토큰 post-enrollment 잠금, var/ PHP 실행차단, HSTS. 문서/테스트: SYSTEM_OVERVIEW.md, security_hardening_test.php 갱신. 참고: 사용자 요청으로 세션 외 기존 미커밋 변경도 함께 포함. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
25 lines
1.1 KiB
C
25 lines
1.1 KiB
C
/* =============================================================================
|
|
* sig.h - raw-body 서명 (STM32 마이그레이션 R1, HMAC-SHA256)
|
|
*
|
|
* 서버 규약(php/config.php:verify_signature_raw):
|
|
* X-Signature = lowercase_hex( HMAC-SHA256( key=API_KEY, msg=raw_body_bytes ) )
|
|
*
|
|
* 클라이언트는 전송할 본문 바이트 그대로를 서명만 하면 된다. JSON 키 정렬·
|
|
* 부동소수 포맷·슬래시 이스케이프를 재현할 필요가 없다. (키 접두 SHA256 이 아닌
|
|
* HMAC 을 사용해 길이확장 공격에 견딘다.)
|
|
* ===========================================================================*/
|
|
#ifndef SIG_H
|
|
#define SIG_H
|
|
|
|
#include <stddef.h>
|
|
|
|
#define SIG_HEX_LEN 64 /* SHA-256 hex 길이 (NUL 제외) */
|
|
#define SIG_HEX_BUFSZ (SIG_HEX_LEN + 1)
|
|
|
|
/* out_hex 에 HMAC-SHA256(key, body) 의 소문자 hex(+NUL)를 기록한다.
|
|
* out_hex 는 최소 SIG_HEX_BUFSZ 바이트.
|
|
* key 는 NUL 종료 문자열, body 는 임의 바이트열(body_len 길이). */
|
|
void sig_raw_body(const char *key, const char *body, size_t body_len,
|
|
char out_hex[SIG_HEX_BUFSZ]);
|
|
|
|
#endif /* SIG_H */
|