2008-09-17 13 views
4

Tamam - Mike sayesinde, bir Diffie-Hellman keypair üretmek için Wincrypt elde edebildi. Genel anahtarı ve diğer tarafın açık anahtarını nasıl ithal edeceğimi anladım. Dokümanlara göre, diğer tarafın açık anahtarının ithalatı üzerine, paylaşılan sır hesaplanmıştır. Harika.Diffie-Hellman için Wincrypt kullanıyorum - paylaşılan sırrı düz metne aktarabilir miyim?

Şimdi bu paylaşılan sırrı elde etmem gerekiyor, ancak bunun mümkün olduğunu düşünmüyorum. CALG_AGREEDKEY_ANY'dan algoritma kimliğini değiştirmek için CryptSetKeyParam numaralı telefonu aramadan 10'u bir PLAINTEXTKEYBLOB türüyle arama başarısız olur. Ama ben bir şey istemiyorum, paylaşılan bir sır istiyorum. Ancak, API bunu cesaretlendirmek için tasarlandı.

Orada herhangi bir fikir var mı? Buradaki problemin sadece WiFi Korumalı Kurulum uygulamasının bir tarafını yazdığımdır. Yani protokol benim için tanımlandı ve diğer taraf bana HCRYPTKEYs vermiyor. dan

+0

Bunun için bir çözüm var mıydı? Benzer bir konuya koşmak ... – Julio

cevap

2

Bu ne ihtiyaç benziyor ... : http://msdn.microsoft.com/en-us/library/aa381969(VS.85).aspx


CryptAcquireContext fonksiyon

  1. Çağrı tuşu gizli oturumu bir Diffie-Hellman genel anahtarı almak ve hesaplamak için Microsoft Diffie-Hellman Şifreleme Sağlayıcısı için bir tanıtıcı.
  2. Yeni bir anahtar oluşturmak için CryptGenKey işlevini çağırarak veya varolan bir anahtarı almak için CryptGetUserKey işlevini çağırarak bir Diffie-Hellman anahtarı oluşturun.
  3. Diffie-Hellman ortak anahtarını CSP'ye almak için, CryptImportKey işlevini çağırın ve pbData parametresindeki ortak BLOB anahtarına bir işaretçiyi geçirerek, dwDataLen parametresindeki BLOB'un uzunluğunu ve Diffie'nin tutamacını Hellman tuşu hPubKey parametresinde. Bu, hesaplamanın yapılması, (Y^X) mod P'un gerçekleştirilmesine neden olur, böylece paylaşılan, gizli anahtar oluşturulur ve anahtar değişimini tamamlar. Bu işlev çağrısı, hKey parametresindeki yeni, gizli oturum anahtarına bir tanıtıcı döndürür. Bu noktada, ithal edilen Diffie-Hellman, CALG_AGREEDKEY_ANY tipindedir. Anahtar kullanmadan önce, bir oturum anahtar tipine dönüştürülmesi gerekir. Bu, dwParamKP_ALGID olarak ayarlanmış CryptSetKeyParam10 işlevini ve pbDataALG_ID işaretçisiyle CALG_RC4 gibi bir oturum anahtarını temsil eden bir değere ayarlamak suretiyle çağrılarak gerçekleştirilir. Anahtar, paylaşılan anahtarı CryptEncrypt veya CryptDecrypt işlevinde kullanmadan önce dönüştürülmelidir. Anahtar türünü dönüştürmeden önce bu işlevlerden herhangi birine yapılan çağrılar başarısız olur.
  4. Gizli oturum anahtarı artık şifreleme veya şifre çözme için kullanılmaya hazırdır.
  5. Anahtar gerekmediğinde, CryptDestroyKey işlevini çağırarak anahtar tutamacını yok edin.
+0

+1 @Richard, Düzenli açıklama. Öneriniz anahtar anlaşma şemasını çözecek, ancak DH kullanarak anahtar taşımayla ilgilenirsem, bu görevi bir PKI için nasıl yapabilirim? – Raj