Имзо ва тафтиши дархостҳо
Имзои дархост ҳаққонияти ирсолкунанда ва якпорчагии мундариҷаро собит месозад. Баръакси TLS (ки каналро муҳофизат мекунад), имзои татбиқшаванда ҳар як паёмро санҷида ва ба прокси, кэш ва таҳвили таъхиршуда тобовар мекунад.
Вазифаҳо:1. Ҳақиқӣ (кӣ фиристодааст) ва якпорчагӣ (тағир наёфт).
2. Ягонагӣ (муҳофизат аз такрорӣ).
3. Decoupling аз нақлиёт (кор дар болои HTTP, навбатҳо, вебхукҳо).
4. Аудитория (санҷиши такрорӣ пас аз моҳҳо).
1) Модели таҳдид (ҳадди аққал)
Иваз намудани бадан/сарлавҳаҳои қад-қади масир.
Бозсозӣ (дархости қонуниро такрор кунед).
Сарлавҳаи поён/тасма.
Дуздии сирри ҳамгироӣ.
Соатҳои синхронӣ (skew соат) ва навбатҳои дароз.
2) Интихоби ибтидоӣ
HMAC (симметрия): оддӣ ва зуд, калид дар ҳарду ҷониб нигоҳ дошта мешавад. Мувофиқ барои webhooks B2B ва API-ҳои дохилӣ.
RSA/ECDSA (асимметрия): калиди хусусӣ аз ирсолкунанда, калиди оммавӣ аз қабулкунанда. Барои ҳамгироии кушод мувофиқ аст ва вақте муҳим аст, ки сирри худро мубодила накунед.
MTLS: аутентификатсияи қабати мутақобилаи интиқол аксар вақт бо имзои NMAC/бадан.
JWT/JWS: қулай барои нишонаҳои баранда ва маркаҳои худкифо; барои имзо кардани бадан, беҳтар аст, ки каноникализатсияро + JWS Detached/HTTP Message Signatures истифода баред.
Имзои HTTP (имзои қисмҳои интихобшудаи дархост): равиши муосир барои REST.
Тавсия: барои webhooks - HMAC + timestamp + nonce + canonicalization бадан; барои API оммавӣ - HTTP имзои паёмҳо ё JWS; дар хавфҳои баланд - илова кардани MTLS.
3) Каноникализатсия (он чизе ки мо имзо мекунем)
Шумо бояд як сатри детерминистиро имзо кунед, ки аз ҷониби ҳарду ҷониб баробар барқарор карда мешавад.
Таркиби истинод:
method \n path_with_query_normalized \n content-type \n digest: SHA-256=BASE64(SHA256(body)) \n x-ts: <unix iso> \n x-nonce: <uuid> \n host \n x-tenant: <tenant_id> \n
Сатри умумӣ:
canonical = join("\n", fields)
signature = HMAC(secret, canonical) # или ECDSA_sign(private_key, canonical)
Қоидаҳо:
- Муқаррар кардани роҳ ва тартиби параметрҳои дархост.
- Фосила/unicode/case - ислоҳ (масалан, сарлавҳаҳои ҳарфҳои хурд, trim).
- Ҷасадҳои калон - ҳаш (Дигест), на "тавре ки ҳаст" -ро фурӯзон кунед.
4) Формати унвон
Намуна барои HMAC:
X-Signature-Alg: hmac-sha256
X-Signature: v1=hex(hmac),ts=1730379005,nonce=550e8400-e29b-41d4-a716-446655440000,kid=prov_42
Digest: SHA-256=BASE64(SHA256(body))
X-Tenant: brand_eu
Намуна барои асимметрия (ECDSA P-256):
Signature: keyId="prov_42", alg="ecdsa-p256-sha256",
ts="2025-10-31T12:30:05Z", nonce="550e...", headers="(request-target) host digest x-tenant",
sig="BASE64(raw_signature)"
Дар куҷо 'кудак '/' Калид' ба шумо имкон медиҳад, ки калидро аз феҳрист интихоб кунед (нигаред ба гардиш).
5) Санҷиш дар охири қабул
Псевдокод:python def verify(request):
1) Basic assert abs (now () - request. ts) <= ALLOWED_SKEW # напр., 300 с assert not replayed(request. nonce, window = TTL) # store nonce/ts in KV
2) Restore canonical canonical = build_canonical (
method=request. method,
path=normalize_path(request. path, request. query),
content_type=request. headers["content-type"],
digest=hash_body(request. body),
ts=request. ts,
nonce=request. nonce,
host=request. headers["host"],
tenant=request. headers. get("x-tenant")
)
3) Get the key key = key_registry. get(request. kid) # secret (HMAC) или public key (ECDSA)
4) Verify if request signature. alg. startswith("hmac"):
ok = hmac_compare(key. secret, canonical, request. signature)
else:
ok = asym_verify(key. public, canonical, request. signature)
5) Solution if not ok: return 401, "SIGNATURE_INVALID"
return 200, "OK"
Муқоисаи доимии HMAC, нигоҳдории 'nonce '/' (ts, event_id)' дар тирезаи фаврии KV (TTL ≥).
6) Анти-такрорӣ ва тирезаҳо
Timestamp + Nonce: рад кардани дархостҳои калонтар аз '± Δ' (масалан. 5 дақ.) Ва nonce дар ин равзана такрор мекунад.
Барои вебхукҳо: 'event _ id' ва ҷадвали паёмдони устуворро истифода баред - ин нисбат ба nonce эътимодноктар аст.
Таҳвили дубора (бозсозӣ) бояд ҳамон як ts/nonce/event_id истифода кунад, на нав тавлид кунад.
7) Бисёр иҷорагир ва минтақаҳо
Калидҳои ҳар як иҷорагир/минтақаро нигоҳ доред: 'kid = <иҷорагир>: <минтақа>: <key _ id>'.
Ҳавзҳо ва маҳдудиятҳои махфии алоҳида; истиқомати маълумотро риоя кунед.
Дар сарлавҳаҳо/каноникализатсия 'X-иҷорагир' -ро нишон диҳед ва минтақа як қисми контексти санҷидашуда мебошад.
8) Идоракунии калид ва гардиш
Феҳристи калидӣ (KMS/Vault): 'кӯдак', намуд, алгоритм, мақом ('фаъол', 'фарсуда', 'истеъфо'), 'дуруст _ аз/дуруст _ ба'.
Дугона-махфӣ: калиди ҷорӣ ва навбатиро дар як вақт нигоҳ доред (қабулкунанда ҳардуро қабул мекунад).
Ротатсия аз рӯи ҷадвал ва ҳодиса (созиш).
Пинҳон кардани калидҳо (агар имкон бошад) ва маҳдуд кардани дастрасӣ ба маводи асосӣ.
Гузоришҳои дастрасӣ ба калидҳо ва амалҳо бо онҳо.
9) Омезиш бо MTLS ва OA buth
MTLS канал ва "шумо кистед" -ро дар сатҳи сертификат тафтиш мекунад.
Имзо паёмро муҳофизат мекунад (тавассути проксиҳо/кэшҳо/навбатҳо муфид аст).
OA puth/JWT аутентификатсия/авторизатсияро пурра мекунад, аммо худ ба худ тамомияти баданро кафолат намедиҳад (агар дар каноникализатсия имзо нашуда бошад).
Таҷрибаҳои пешқадам: Имзои бадан MTLS + (Digest) + HMAC/ECDSA + кӯтоҳ 'ts' -interval.
10) Рамзҳои хатогӣ ва вокуниш
'401 SIGNATURE_INVALID' имзои/алгоритми нодуруст аст.
'401 KEY_REVOKED' -' кӯдак 'беэътибор аст/ба охир мерасад.
'400 TIMESTAMP_OUT_OF_RANGE' - соат/тиреза.
'409 NONCE_REPLAYED' - Редо ошкор карда шуд.
'400 DIGEST_MISMATCH' - бадан иваз шуд.
'415 UNSUPPORTED_ALGORITHM'' ҳалношуда 'аст.
'429 TOO_MANY_ATTEMPTS' - дротинги калидӣ/иҷорагир.
Сабаби дақиқро дар 'хатогӣ _ код' хондан мумкин аст; асрори/каноникализатсияро "тавре ки ҳаст" барнагардонад.
11) Мушоҳида ва аудит
Нишондиҳандаҳо:- 'verify _ p95 _ ms', 'verify _ information _ rate', 'digest _ match _ rate', 'replay _ blocked _ rate', 'alg _ usage {hmac, ecdsa}', 'clock _ skew _ ms'.
- Гузоришҳо (сохторӣ): 'кӯдак', 'alg', 'иҷорагир', 'минтақа', 'ts', 'nonce', 'digest _ hash', 'қарор', 'сабаб'.
- Пайгирӣ: имзои атрибутҳо. кудак ',' имзо. алг ',' имзо. ts_skew'.
- Аудит: сабти тағйирнопазири гардиш, истифодаи калидҳо ва парчамҳои таҳаммулпазирӣ.
12) Иҷро
Ҷасадро бо ҷараён пахш кунед (онро дар хотираи худ нигоҳ надоред).
Калидҳои ҷамъиятии кэшро аз ҷониби 'кӯдак' бо TTL кӯтоҳ ва маъюбӣ аз рӯи ҳодиса.
Дар канор/дарвоза санҷишҳои пешакӣ (ts/nonce/format) гузаронед.
HMAC нисбат ба ECDSA тезтар; ECDSA барои ҳамгироии беруна ва калидҳои "муштарак" қулайтар аст.
13) Санҷиш
Маҷмӯи асбобҳо: ҳамон дархостҳо → ҳамон каноникализатсия/имзо; ҷойҳои ифлос/тартиби дархост/→ сарлавҳаҳо устувор мебошанд.
Манфӣ: 'кӯдак/алг' -и беэътибор, бадан/мизбони тағирёфта, такрори nonce, ts кӯҳна, skew соат.
Ба амвол асос ёфтааст: Ҳама гуна дархостҳои эквивалент як сатри каноникиро ба вуҷуд меоранд.
Интероп: санҷишҳои байнисоҳавӣ (Go/Java/гиреҳ/Python).
Бетартибӣ: таъхирҳо, ақибнишинӣ, тағироти калидӣ дар парвоз.
14) Китобҳои бозӣ (runbooks)
1. 'SIGNATURE _ INVALID' spike
Тафтиши гардиши калидҳо, номувофиқатии соат, тағйирот дар каноникализатсия дар ирсолкунанда.
Муваққатан "қабули дугона" -ро барои "кӯдаки" кӯҳна фаъол кунед, шарики огоҳ кунед.
2. Афзоиши 'REPAYED'
TTL-и нигаҳдории nonce-ро зиёд кунед, бозрасонро дар ирсолкунанда тафтиш кунед, skew соатро санҷед.
IP/ASN-и таҳқиромезро дар канор гузоред.
3. 'DIGEST _ MISMATCH' ба таври оммавӣ
Санҷидани сарлавҳаи прокси/фишурдасозӣ/аз нав сабт кардан; нусхаи каноникализатсияро ислоҳ кунед.
Ғайрифаъол кардани вайронкунандагони бадан/сарлавҳа.
4. Компромиссияи калидӣ
Дарҳол "кӯдак" -ро бекор кунед, ба "next _ kid" тарҷума кунед, ҳама асрори/нишонаҳо, дастрасии аудиториро барқарор кунед.
15) Хатогиҳои маъмулӣ
Имзои "қисми бадан" ё JSON бидуни ислоҳи фармоиш → осебпазирӣ ба пермутатсияи саҳроӣ.
Набудани прокси 'Digest' метавонад баданро нодида гирад.
Равзанаи дарозмуддати "ts" бидуни nonce барои дубора кушода аст.
Нигоҳ доштани махфият дар муҳити тағйирёбанда бе KMS/Vault.
Имзоро на вақти доимӣ муқоиса кунед.
Нодида гирифтани 'мизбон '/' роҳ' дар каноникализатсия → ҳамлаи пешакӣ.
Омезиши 'кӯдак' иҷорагирон ва минтақаҳои гуногун.
16) Рӯйхати санҷиши пеш аз фурӯш
- Формати каноникализатсия муайян карда шудааст (усул, роҳ + дархост, намуди мундариҷа, Digest, ts, nonce, мизбон, иҷорагир).
- Татбиқи HMAC/ECDSA бо 'кӯдак', феҳристи асосӣ ва сирри дугона.
- Анти-такрорӣ (nonce + ts) ва нигаҳдории inbox/event_id барои webhooks.
- Рамзҳои хатогии танзимшуда/сиёсати бозгардонидан ва кашидани як иҷорагир/калид.
- Мушоҳида: санҷидани ченакҳо, гузоришҳо, пайгирӣ, огоҳӣ барои таркишҳо.
- Гардиши калидҳо автоматӣ аст; аудит ва ҳуқуқҳои дастрасӣ маҳдуданд.
- Маҷмӯаҳои санҷиши мутобиқати Canonicalization ва interlanguage.
- Ҳуҷҷатгузорӣ барои интеграторҳо бо намуна бо 3-4 забон ва ислоҳҳо.
- m-TLS барои ҳамгироии ҳассос фаъол аст; JWT танҳо ҳамчун илова истифода мешавад, на ҷойгузини имзои бадан.
Хулоса
Имзо ва тасдиқи дархостҳо "як сарлавҳа" нест, балки интизом аст: каноникализатсияи возеҳ, тирезаҳои кӯтоҳи вақт, анти-такрорӣ, гардиши калидӣ ва мушоҳида. Барои ҳамаи интегратсияҳо (API ва webhooks) стандарти ягона созед, 'kids '/KMS-ро истифода баред, ҳангоми гардиш ду калидро қабул кунед ва контури шумо ба ғорат, пешгӯишаванда ва аудити осон тобовар хоҳад буд.