SHT30 온습도 모니터링 시스템 전체 소스(서버 PHP, STM32 펌웨어, SQL, 테스트). 전체 코드리뷰에서 도출된 보안 하드닝 10건 반영: - 요청 서명 HMAC-SHA256 전환(펌웨어 sig.c/서버 config.php/호스트 패리티 동시) - 재전송 방어 + 기본 API_KEY fail-closed + 디바이스 문자열 정제(api/sensor_data.php) - 오프라인 SMS 중복 발송 경합 제거(cron_heartbeat.php, 원자적 선점) - CSV 수식 주입 방지(monthly_report.php), 감사로그 회전 락(retention_cleanup.php) - 브루트포스 카운터 원자화(login.php), 예시 TOTP 비밀키 무효화, 마이그레이션 멱등화 _backup/(하드코딩 실 비밀값 포함)·config.local.php·런타임 상태는 .gitignore 제외.
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 에 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 */
|