Zine.net online

Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc
w Szukaj

mgrzeg.net - Admin on Rails :)

Unique Container Name - rozwiązanie zagadki

W części 2. mini serii o $EFS, w rozdziale poświęconym certyfikatom wspomniałem, że nie znam sposobu wyliczania 'dynamic guid', czyli pierwszej składowej nazwy pliku zawierającego klucz RSA. Kurz po Ignite powoli opada, więc czas podzielić się nową wiedzą.

We wspomnianym tekście snułem przypuszczenia, że jest to jakiś skrót fragmentu, bądź całego certyfikatu. I w istocie jest to skrót, jednak nie certyfikatu, a nazwy kontenera. Wyliczenie nie jest takie oczywiste, choć też nie jest skomplikowane: obliczamy md5(ascii(lower(container_name))+’\0’), a następnie dzielimy go na 4. 32-bitowe słowa, zapisujemy je osobno little endian i całość łączymy w łańcuch. Poniżej kod realizujący powyższe dla danych z tekstu:

string containerName = "0d29406b-f9e6-4659-90e4-c407201049d2";

byte[] cnASCII = Encoding.ASCII.GetBytes(containerName);

byte[] cnASCIIBytes = new byte[cnASCII.Length + 1];

Buffer.BlockCopy(cnASCII, 0, cnASCIIBytes, 0, cnASCII.Length);

byte[] result = new MD5CryptoServiceProvider().ComputeHash(cnASCIIBytes);

StringBuilder sb = new StringBuilder(32);

using (BinaryReader bReader = new BinaryReader(new MemoryStream(result)))

{

for (int i = 0; i < 4; i++)

sb.Append(bReader.ReadInt32().ToString("x8"));

}

Console.WriteLine("dynamic guid: {0}", sb.ToString());

//dynamic guid: 7023b50b1cb2749ef32e108926d13a7d


Reszta nazwy, czyli wartość MachineGuid pozostaje bez zmian, należy jednak pamiętać, że występuje on wyłącznie w kluczu HKLM\Software\Microsoft\Cryptography i nie ma jej w odpowiednim dla aplikacji 32-bit (HKLM\Software\Wow6432Node\Microsoft\Cryptography).



Opublikowane 20 maja 2015 13:01 przez mgrzeg
Filed under:

Powiadamianie o komentarzach

Jeżeli chciałbyś otrzymywać email gdy ta wypowiedź zostanie zaktualizowana, to zarejestruj się tutaj

Subskrybuj komentarze za pomocą RSS

Komentarze:

Brak komentarzy

Co o tym myślisz?

(wymagane) 
(opcjonalne)
(wymagane) 

  
Wprowadź kod: (wymagane)
Wyślij

Subskrypcje

W oparciu o Community Server (Personal Edition), Telligent Systems