Benutzer mit den meisten Antworten
Abweichende Ergebnisse bei Benutzung der Crypt-API unter WinXP

Frage
-
Wir benutzen zur Verschlüsselung die Crypt-API von Windows (Funktionen aus advapi32.dll).
Die Anwendungen laufen alle auf WinXP SP 3.
Nun haben wir das Problem, dass bei einem Teil der PCs das Passwort anders entschlüsselt und verschlüsselt wird als auf dem anderen Teilder PCs
Es gibt insgesamt nur 2 Varianten der Ergebnisse. Auffallend ist, dass die Ergebnisse der einen PC-Gruppe mit den Ergebnissen übereinstimmt, die wir auf den Win7-PCs erhalten. Wir verschlüsseln mit folgendem prinzipiellen Ablauf:
CryptAcquireContext("", "", PROV_RSA_FULL, 0)
CryptCreateHash(hProv, CALG_MD5, 0, 0)
CryptHashData(....
CryptDeriveKey(hprov, CALG_RC4, hHash, CRYPT_EXPORTABLE)
CryptEncryptStr(...Wie können wir erreichen, dass alle WinXP-PCs gleiche Ergebnisse berechnen?
Antworten
-
Hallo insider_hexe,
Schau Dir mal folgenden Diskussionsfaden an. Vielleicht nähert er sich an Deinem Problem. Marcel Roma ist hier der Spezialist in Crypto-Sachen.
Signieren mit SHA256: Datei mit einem Zertifikat aus dem Zertifikatsspeicher signieren
Aus dem obigen Diskussionsfaden:
„// As of .NET Framework 3.5 SP1 the default CSP has changed from PROV_RSA_FULL (1) to
// PROV_RSA_AES (24) for all OS > XP, so default is 24 even without setting
// CspParameters.ProviderType to 24“
„Windows XP SP3 (bzw. Rsaenh.dll) unterstützen PROV_RSA_AES sowie CALG_SHA_256, CALG_SHA_384, CALG_SHA_512 voll.“
„Da nun aber der Providername in der Registry steht, könnte man HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype) exportieren, dann die reg-Datei bearbeiten und " (Prototype)" weglöschen und anschließend die reg-Datei wieder importieren. Dadurch würde ein neuer Reistrierungs-Schlüssel erzeugt werden und alles würde wie gewünscht funktionieren.
Die SHA-2 Algorithmen werden nur von PROV_RSA_AES unterstützt, bei Verwendung mit PROV_RSA_FULL kommt es - wie bereits besprochen - zu einem Fehler (falscher Algorithmus).“
Mit welcher Entwicklersprache habt ihr diese Anwendungen geschrieben?
Wenn ich auf C++ schaue (mit Wincrypt einen MD5 hash zu erzeugen) oder hier (http://pinvoke.net/default.aspx/advapi32/CryptAcquireContext.html) sehe ich folgende Signatur mit 5 Parameter wo der erste Paramater als Referenz übergeben wird (ByRef hProv as IntPtr):
//Get crypto context
result = CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT);
[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
[return : MarshalAs(UnmanagedType.Bool)]
static extern bool CryptAcquireContext(ref IntPtr hProv, string pszContainer, string pszProvider, uint dwProvType, uint dwFlags);
…und Du hast gepostet: CryptAcquireContext("", "", PROV_RSA_FULL, 0)…also 4 Parameter
Kannst Du nicht auf AES umsteigen anstatt MD5 | CALG_RC4?
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 27. September 2012 08:41
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 12. Oktober 2012 15:04
Alle Antworten
-
Hallo insider_hexe,
Schau Dir mal folgenden Diskussionsfaden an. Vielleicht nähert er sich an Deinem Problem. Marcel Roma ist hier der Spezialist in Crypto-Sachen.
Signieren mit SHA256: Datei mit einem Zertifikat aus dem Zertifikatsspeicher signieren
Aus dem obigen Diskussionsfaden:
„// As of .NET Framework 3.5 SP1 the default CSP has changed from PROV_RSA_FULL (1) to
// PROV_RSA_AES (24) for all OS > XP, so default is 24 even without setting
// CspParameters.ProviderType to 24“
„Windows XP SP3 (bzw. Rsaenh.dll) unterstützen PROV_RSA_AES sowie CALG_SHA_256, CALG_SHA_384, CALG_SHA_512 voll.“
„Da nun aber der Providername in der Registry steht, könnte man HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype) exportieren, dann die reg-Datei bearbeiten und " (Prototype)" weglöschen und anschließend die reg-Datei wieder importieren. Dadurch würde ein neuer Reistrierungs-Schlüssel erzeugt werden und alles würde wie gewünscht funktionieren.
Die SHA-2 Algorithmen werden nur von PROV_RSA_AES unterstützt, bei Verwendung mit PROV_RSA_FULL kommt es - wie bereits besprochen - zu einem Fehler (falscher Algorithmus).“
Mit welcher Entwicklersprache habt ihr diese Anwendungen geschrieben?
Wenn ich auf C++ schaue (mit Wincrypt einen MD5 hash zu erzeugen) oder hier (http://pinvoke.net/default.aspx/advapi32/CryptAcquireContext.html) sehe ich folgende Signatur mit 5 Parameter wo der erste Paramater als Referenz übergeben wird (ByRef hProv as IntPtr):
//Get crypto context
result = CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT);
[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
[return : MarshalAs(UnmanagedType.Bool)]
static extern bool CryptAcquireContext(ref IntPtr hProv, string pszContainer, string pszProvider, uint dwProvType, uint dwFlags);
…und Du hast gepostet: CryptAcquireContext("", "", PROV_RSA_FULL, 0)…also 4 Parameter
Kannst Du nicht auf AES umsteigen anstatt MD5 | CALG_RC4?
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 27. September 2012 08:41
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 12. Oktober 2012 15:04
-
Hallo insider_hexe,
Es freut uns dass Du Dein Problem lösen könntest.
Ich möchte Dich bitte folgendes lesen und die Beiträge die Dir geholfen haben zu bewerten. Vielen Dank.
Nutzen Sie die Bewertungsfunktionen ("Antwort" und "Hilfreich") in den MSDN Foren! Unter anderem können andere später eine Lösung schneller finden. Es ist also wünschenswert, dass die fragenden (Benutzer) die Postings anderer Beantworter bewerten.
Hier dazu die wichtigsten Anhaltspunkte aus den Forenregeln und FAQs.Lösungsbeiträge als „Die Antwort“ markieren
Bitte markieren Sie den Beitrag, der zur Lösung geführt hat, als "Die Antwort". Durch Bewerten eines Beitrags als "Die Antwort" können andere Teilnehmer die Lösung schneller finden. Außerdem können Sie dem Benutzer, der die Antwort eingereicht hat, für seinen Beitrag danken und zur Steigerung der Antwortqualität in der Diskussionsgruppe beitragen. [Quelle: Forenregeln]Bitte markiere den/die Beiträge als Antwort, die dir geholfen haben, dein Problem zu lösen. Das ist zum einen eine Anerkennung für die Autoren dieser Beiträge, zum anderen hilft es zukünftigen Lesern, sich in diesem Thread besser zu orientieren und Antworten auf ihre Fragen schneller zu identifizieren.
Wie zeige ich an, dass meine Frage durch einen Beitrag beantwortet wurde?
Wie bewerte ich einen Beitrag als hilfreich? Um einen Beitrag als hilfreich zu bewerten, klicken Sie in einem beliebigen Beitrag auf Als hilfreich bewerten. Sie können Ihre Stimme nur einmal für einen Beitrag abgeben. [Quelle: Häufig gestellte Fragen]Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Bearbeitet Robert BreitenhoferModerator Donnerstag, 27. September 2012 08:17 Formatierung
-
Hallo insider_hexe,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.