數據加密和TLS
1)威脅圖和目標
在通道(中轉): 攔截/修改流量,MitM, downgrade.
靜止(at rest):竊取磁盤/備份、DB/Logs轉儲、內部人員。
鑰匙:泄露秘密,弱輪換,重用。
目的是通過可測量的SLO和可控的加密可信度來確保隱私,完整性和真實性。
2)數據分類和政策
課程:公共/內部/機密/受限制(PII/財務/PAN)。
標簽: 'data。class`, `tenant`, `region`, `retention`.
強制性措施:對於Restricted-字段/對象級加密,訪問日誌,單獨的per-tenant/region密鑰。
3)靜止加密(at rest)
3.1 Envelope加密
DEK(數據加密密鑰)加密數據;KEK/CMK(KMS/HSM)加密DEK。
KEK輪換不需要數據解密-pere-wrap DEK。
DEK最好是具有短TTL 的對對象/部分/tenant。
3.2個級別
透視(TDE):磁盤/表空間(PostgreSQL/MySQL/SQL Server)。簡單但沒有顆粒控制。
在應用程序級別:字段/對象(PAN, secrity)-更適合於多任務和訪問最小值。
存儲/雲:SSE-KMS S3/GCS;對於ACID數據,可以使用FLE(現場級別加密)。
3.3算法和模式
AEAD:AES-256-GCM或ChaCha20-Poly1305(在CPU上沒有AES-NI)。
IV/nonce:唯一性是嚴格強制性的;存儲在ciphertext旁邊;不要重復。
哈希:密碼-含鹽和鐵參數的Argon2id(或scrypt/bcrypt)。
IAU/簽名:完整性HMAC-SHA-256或AEAD內置標簽。
3.4用於DB/文件的實踐
PostgreSQL:pgcrypto/擴展;在write上-加密應用程序中的敏感字段。
Mongo/Doc存儲:client-side FLE, KMS中的密鑰。
Backaps:單個密鑰,僅可從CI/CD代理訪問;離網拷貝-總是加密的。
4)密鑰管理(KMS/HSM/Vault)
真相來源:KMS/HSM;私鑰不會離開設備/服務。
轉化:「kid」,「purpose」,「alg」,「created_at」,「rotates_at」。
訪問:least-privilege;職責分工(SoD)。
輪換:按時間表(3-6個月簽名),按事件(事件),重置令牌的旋轉使用。
審計:不可更改的日誌:誰,何時簽名/解密。
Multi-tenant:按鍵per-tenant/brand/region;BYOK/HYOK滿足客戶要求。
5)通道加密(TLS)
5.1個低點
TLS 1.2+,最好是TLS 1。3;域上的HSTS。
Schifrosuites:TLS1。3-預定(AES_256_GCM_SHA384/ CHACHA20_POLY1305_SHA256)。
PFS:所有關鍵的epemerna交換(ECDHE)。
ALPN:HTTP/2和HTTP/3(QUIC)有意識地包括在內;監控計時器。
5.2證書,OCSP, pinning
OCSP穩定和短鏈。
會議重新使用:TLS門票,TTL短。
0-RTT (TLS 1.3)-謹慎啟用(僅限等效的GET)。
Pinning: 在應用程序/mobils(非剛性HPKP)中僅通過TSP/Key continuity「公用鍵」。
mTLS:在周邊內/服務與合作夥伴之間;SAN認證。
5.3 gRPC/HTTP/QUIC
gRPC傳輸Deadline和元數據-檢查和限制每試用時間。
HTTP/3(QUIC)加快了第一個字節;檢查WAF/平衡器的兼容性。
6)mTLS和服務市政廳
SPIFFE/SPIRE或mesh-CA,用於自動頒發短期證書(7-30天)。
政客:誰在L7級別與誰交談(SVID→SVID),authZ。
輪換是透明的;通過trust-bundle update revoke。
7)性能和操作
AES-NI:在支持服務器上-AES-GCM更快。在移動/舊版CPU上-ChaCha20-Poly1305。
TLS調音:帶有PFS但處於合理界限的短鍵(P-256/25519);握手緩存。
擊球:盡量減少小查詢;TLS-overhead與連接數成正比。
離載:周邊TLS(Envoy/NGINX),內部-mTLS在mesh中。
8)秘密和日誌政策
僅在KMS/Vault中提供秘密;Kubernetes-etcd+KMS提供程序加密。
禁令:鑰匙/代幣/PAN/秘密;偽裝。
Snapshots/轉儲:加密和限制訪問;監控密鑰的訪問。
9)Configi和示例
9.1 NGINX (TLS嚴格配置文件)
nginx ssl_protocols TLSv1. 2 TLSv1. 3;
ssl_prefer_server_ciphers on;
ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:P-256;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
9.2 Envoy (mTLS to apstrim, pseudo)
yaml transport_socket:
name: envoy. transport_sockets. tls typed_config:
common_tls_context:
tls_params:
tls_minimum_protocol_version: TLSv1_2 tls_certificate_sds_secret_configs:
- name: service_cert # client certificate validation_context_sds_secret_config:
name: mesh_ca_bundle # trusted roots
9.3使用AEAD(偽)的示例)
pseudo nonce = random(12)
ciphertext, tag = AES256_GCM. encrypt(key=DEK, nonce, aad=tenant object_id, plaintext)
store(nonce ciphertext tag)
10)輪換和召回鑰匙
JWKS/「kid」代表JWT;短的「exp」。
TTL召回令牌的「jti」/「sid」列表。
HMAC(webhooks)的秘密:主動+金絲雀;在最後日期之前接待雙方。
TLS:Alerts T-30/T-7/T-1,自動擴展,安全金絲雀。
11)可觀察性和Alerta
Метрики: `tls_handshake_fail_total{reason}`, `tls_version_share`, `cipher_share`, `ocsp_stapling_errors`, `kms_ops_total{op}`, `decrypt_fail_total`, `jwks_kid_share`.
訪問日誌:協議/版本/密碼(無秘密)。
Alerts:過期證書、「bad_record_mac」激增、「不信任鏈」興起、解密失敗。
12) iGaming/財務細節
PAN安全流:令牌化,僅存儲令牌;PAN-具有PSP/令牌存儲。
PCI DSS:加密持卡人數據,限制密鑰訪問,加密操作日誌,網絡分割。
區域性:玩家區域的密鑰和數據(潛在性/主權)。
Backoffice: mTLS+SSO,短會話,FIDO2用於管理。
13)反模式
TLS < 1.2;允許的弱密碼/RC4/3DES。
常見的「永恒」秘密和鑰匙沒有旋轉和「小子」。
GCM中的IV/nonce重播(出於安全考慮,這是致命的)。
帶秘密/密鑰/pan數據的日誌。
只有TDE不加密敏感字段。
銷售中的HPKP定位(「自磨損」風險)。
0-RTT寫作/非偶然查詢。
14)準備就緒支票清單
- 數據分類和加密策略(按類)。
[] AEAD (AES-GCM/ChaCha20-Poly1305);獨特的nonce;密碼Argon2id。
- Envelope加密:DEK 對象/tenant;KEK в KMS/HSM.
[] TLS 1.2+/1.3, HSTS, OCSP stapling;一組合理的密碼。
- 內部的mTLS;自動簽發/輪換短期證書。
- JWKS/「kid」,短「exp」,「jti」列表;重叠的秘密/耳環輪換。
- Bacaps和日誌是加密的;訪問和操作被審核。
- TLS/KMS/JWKS中的Dashbords/Alerts;降解和金絲雀測試。
- 文件:事故程序(鑰匙損害)。
15) TL;DR
加密無處不在:在頻道-TLS 1。3/1.2個PFS和嚴格的外圍;內部-mTLS。靜止時-envelope (DEK/KEK)與KMS/HSM中的密鑰,顆粒加密敏感字段。通過「kid」/JWKS管理密鑰,並定期進行重疊旋轉,存儲加密操作日誌。選擇AES-GCM(或ChaCha20-Poly 1305),不要輕描淡寫,加密back/logs。對於iGaming/PAN-令牌化和PCI意識分割。