İleti Bütünlüğü için HMAC-SHA256
API yüklerinin bütünlüğünü sağlamak için HMAC-SHA256 imzaları oluşturun ve doğrulayın.
İleti Bütünlüğü için HMAC-SHA256, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
HMAC Nedir
HMAC (Özet Tabanlı İleti Kimlik Doğrulama Kodu), bir MAC üretmek için kriptografik bir özet işlevini gizli bir anahtarla birleştirir. Verilerin kurcalanmadığını AND göndericinin gizli anahtarı bildiğini kanıtlar.
HMAC ve Düz Özet
Düz bir SHA-256 özeti herkes tarafından hesaplanabilir. HMAC gizli anahtarı gerektirir — yalnızca anahtarı bilen taraflar geçerli bir HMAC oluşturabilir veya doğrulayabilir. Düz özetler bütünlük sağlar ancak kimlik doğrulaması sağlamaz.
Java'da HMAC-SHA256 Hesaplama
Mac.getInstance("HmacSHA256") kullanın, bir SecretKeySpec ile başlatın ve doFinal(data) çağrısını yapın.
byte[] keyBytes = "my-secret-key".getBytes(StandardCharsets.UTF_8);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
byte[] hmac = mac.doFinal("payload data".getBytes(StandardCharsets.UTF_8));
String hmacHex = HexFormat.of().formatHex(hmac);
System.out.println(hmacHex); // 64-char hexHMAC'yi Doğrulama
Paylaşılan anahtarla alınan veriler üzerindeki HMAC'yi yeniden hesaplayın. Zamanlama saldırılarını önlemek için sabit süreli karşılaştırma (MessageDigest.isEqual) kullanın.
byte[] expectedHmac = computeHmac(key, receivedPayload);
byte[] actualHmac = HexFormat.of().parseHex(receivedHmacHex);
boolean valid = MessageDigest.isEqual(expectedHmac, actualHmac);
if (!valid) throw new SecurityException("HMAC verification failed — data tampered!");Güvenli Anahtar Oluşturma
HMAC anahtarları parola değil, rastgele baytlar olmalıdır. 256 bitlik bir anahtar oluşturmak için KeyGenerator veya SecureRandom kullanın.
KeyGenerator kg = KeyGenerator.getInstance("HmacSHA256");
kg.init(256);
SecretKey key = kg.generateKey();
String b64Key = Base64.getEncoder().encodeToString(key.getEncoded());API İsteklerini HMAC ile İmzalama
HTTP yöntemini, yolu, zaman damgasını ve gövdeyi kullanarak HMAC'yi hesaplayın. HMAC'yi X-Signature üst bilgisine ekleyin. Sunucu, isteğin kurcalanmadığını doğrulamak için HMAC'yi yeniden hesaplar ve karşılaştırır.
String payload = method + "\n" + path + "\n" + timestamp + "\n" + body;
byte[] hmac = computeHmac(apiSecretKey, payload);
request.header("X-Signature", "hmac-sha256=" + HexFormat.of().formatHex(hmac));
request.header("X-Timestamp", timestamp);Yeniden Oynatma Saldırılarını Önleme
Saldırgan, geçerli bir şekilde imzalanmış isteği yeniden oynatabilir. İmzalanan yüke bir zaman damgası ekleyin ve birkaç dakikadan eski istekleri reddedin.
long timestamp = Long.parseLong(request.getHeader("X-Timestamp"));
if (Math.abs(System.currentTimeMillis() / 1000 - timestamp) > 300) {
throw new SecurityException("Request too old — possible replay attack");
}Web Kancalarını HMAC ile Doğrulama
GitHub, Stripe ve birçok hizmet web kancalarını HMAC ile imzalar. Web kancasının hizmetten geldiğinden ve değiştirilmediğinden emin olmak için X-Hub-Signature-256 üst bilgisini doğrulayın.
// GitHub webhook verification:
String received = request.getHeader("X-Hub-Signature-256").replace("sha256=","");
byte[] expected = computeHmac(webhookSecret, request.getBody());
boolean valid = MessageDigest.isEqual(expected, HexFormat.of().parseHex(received));JWT'de HMAC
HS256 (HMAC-SHA256), yaygın bir JWT imza algoritmasıdır. Başlık+yük, paylaşılan bir gizli anahtarla imzalanır. Hem yayımcı hem de doğrulayıcı gizli anahtarı bilmelidir — aynı güven sınırındaki mikro hizmetler için uygundur.
HMAC Anahtarlarını Döndürme
HMAC anahtarlarını düzenli aralıklarla döndürün. Döndürme sırasında kısa bir örtüşme süresi boyunca hem eski hem de yeni anahtarın HMAC'lerini kabul edin, ardından eski anahtarı kullanımdan kaldırın.
HMAC ve Dijital İmzalar Ne Zaman Kullanılmalı
HMAC: simetriktir — her iki taraf da gizli anahtarı paylaşır, hızlıdır ve dahili API'ler ile web kancası doğrulaması için kullanılır. Dijital imzalar (RSA/ECDSA): asimetriktir — yalnızca imzalayan taraf gizli anahtara sahiptir, genel anahtara sahip herkes tarafından doğrulanabilir ve dağıtık sistemlerde JWT'ler için kullanılır.
Hızlı Kontrol
HMAC karşılaştırması neden sabit süreli eşitlik kullanmalıdır?
Özet
HMAC-SHA256, kimlik doğrulamalı bütünlük sağlar — veri kaynağını ve verilerin kurcalanmadığını kanıtlar. Mac.getInstance("HmacSHA256") kullanın. Her zaman sabit süreli karşılaştırma kullanın. Yeniden oynatma saldırılarını önlemek için zaman damgaları ekleyin. API imzalama, web kancası doğrulama ve HS256 JWT'leri için kullanın.
Sıkça Sorulan Sorular
“İleti Bütünlüğü için HMAC-SHA256” dersi ücretsiz mi?
Evet — “İleti Bütünlüğü için HMAC-SHA256” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“İleti Bütünlüğü için HMAC-SHA256” dersinde ne öğreneceğim?
API yüklerinin bütünlüğünü sağlamak için HMAC-SHA256 imzaları oluşturun ve doğrulayın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“İleti Bütünlüğü için HMAC-SHA256” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- MessageDigest ile Şifreleme Özeti Oluşturma
- AES Simetrik Şifreleme
- İleti Bütünlüğü için HMAC-SHA256
- JWT: Yapı, Oluşturma ve Doğrulama