none
MS-RDPBCGR Section 5.3.4 RRS feed

  • Question

  • Hi,

    We are experiencing some trouble with the Non-FIPS hashing section. We currently have the following code to calculate the hash of a message:

     

                    byte[] PreMasterSecret = new byte[48];
                    for (int i = 0; i < 24; i++)
                    {
                        PreMasterSecret[i] = ClientRandom[i];
                    }
                    for (int i = 0; i < 24; i++)
                    {
                        PreMasterSecret[24 + i] = ServerRandom[i];
                    }
                    byte[] MasterSecret = SaltedHash(PreMasterSecret, new byte[] { 0x41 }).Append(SaltedHash(PreMasterSecret, new byte[] { 0x42, 0x42 })).Append(SaltedHash(PreMasterSecret, new byte[] { 0x43, 0x43, 0x43 }));
                    byte[] SessionKeyBlob = SaltedHash(MasterSecret, new byte[] { 0x58 }).Append(SaltedHash(MasterSecret, new byte[] { 0x59, 0x59 })).Append(SaltedHash(MasterSecret, new byte[] { 0x5A, 0x5A, 0x5A }));
                    byte[] MACKey128 = new byte[16];
                    for (int i = 0; i < 16; i++)
                    {
                        MACKey128[i] = SessionKeyBlob[i];
                    }
                    System.Security.Cryptography.SHA1Managed Sha1_1 = new System.Security.Cryptography.SHA1Managed();
                    System.Security.Cryptography.MD5Cng MD5 = new System.Security.Cryptography.MD5Cng();
                    byte[] Pad1 = Enumerable.Repeat<byte>(0x36, 40).ToArray<byte>();
                    byte[] Pad2 = Enumerable.Repeat<byte>(0x5C, 48).ToArray<byte>();
                    
                    byte[] SHAComponent = Sha1_1.ComputeHash(MACKey128.Append(Pad1).Append(new byte[] { P.Length.ToByteArray(0), P.Length.ToByteArray(1), P.Length.ToByteArray(2), P.Length.ToByteArray(3) }).Append(P));
    
                    byte[] MACSignature = MD5.ComputeHash(MACKey128.Append(Pad2).Append(SHAComponent));
                    return MACSignature;
                }
               static byte[] SaltedHash(byte[] S, byte[] I)
                {
                    System.Security.Cryptography.MD5Cng MD5 = new System.Security.Cryptography.MD5Cng();
                    System.Security.Cryptography.SHA1Managed Sha1_1 = new System.Security.Cryptography.SHA1Managed();
                    return MD5.ComputeHash(S.Append(Sha1_1.ComputeHash(I.Append(S).Append(ClientRandom).Append(ServerRandom))));
                }
    ________________________________
       public static byte[] Append (this byte[] FirstPart, byte[] SecondPart)
            {
                byte[] Combined = new byte[FirstPart.Length + SecondPart.Length];
                FirstPart.CopyTo(Combined, 0);
                SecondPart.CopyTo(Combined, FirstPart.Length);
                return Combined;
            }
    

    Without any samples, it is hard to identify what is wrong. A suggestion for the documentation would be to include the Private Exponent used by the server in the sample Connection Sequence (4.1).

     

    Also, I'm curious as to the reasoning behind using such a multi-step process rather than just taking the MD5 hash of the whole message? I imagine it would add a little entropy, but it seems like it would be negligible.

    Thanks in advance!

     


    • Edited by felipet Friday, October 21, 2011 9:47 PM Fix small bug: 0x59 only repeats twice. The server still diconnects the session because of an error.
    Friday, October 21, 2011 3:30 AM

Answers

  • Hi Felipt,

     

    Please let me know if the sample below resolves your issue:

     

    INPUT
    =====

    ClientRandom (32 bytes):

        f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78 f3 c5

    ServerRandom (32 bytes):

        7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74 85 7e

     

    PROCESS
    ========

    PreMasterSecret = First192Bits(ClientRandom) + First192Bits(ServerRandom)

        f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e 23 97 87 b6 91 65 21 bb
        7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16 10 bd

    MasterSecret = PreMasterHash( 0x41 'A' ) + PreMasterHash( 0x4242 'BB' ) + PreMasterHash( 0x434343 'CCC' )

    PreMasterHash( 'A' )
    ---------------------

        'A' (0x41) + PreMasterSecret + ClientRandom + ServerRandom:

            41 f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87
            5e 23 97 87 b6 91 65 21 bb 7a fb 29 5b 7e 19 74
            67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16 10
            bd f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87
            5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78 f3
            c5 7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c
            6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74 85
            7e

        Calculate SHA1 Hash of above:

            14 cf 3a 70 31 ee cb bb a8 9b 7b f3 0b b1 02 c3 3a 55 67 be

        PreMasterSecret + SHA1Hash:

            f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e 23 97 87 b6 91 65 21 bb
            7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16 10 bd
            14 cf 3a 70 31 ee cb bb a8 9b 7b f3 0b b1 02 c3 3a 55 67 be

        MD5Hash of the above:

            03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22 a9 f8


    PreMasterHash( 'BB' )
    ---------------------

        'BB' (0x4242) + PreMasterSecret + ClientRandom + ServerRandom:

            42 42 f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32
            87 5e 23 97 87 b6 91 65 21 bb 7a fb 29 5b 7e 19
            74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16
            10 bd f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32
            87 5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78
            f3 c5 7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf
            8c 6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74
            85 7e

        Calculate SHA1 Hash of above:

            99 3a 3c e5 2a 5c 49 3f 49 b0 16 3a 40 b3 40 0d 97 ce d4 9e

        PreMasterSecret + SHA1Hash:

            f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e 23 97 87 b6 91 65 21 bb
            7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16 10 bd
            99 3a 3c e5 2a 5c 49 3f 49 b0 16 3a 40 b3 40 0d 97 ce d4 9e

        MD5Hash of the above:

            c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d 9d c9


    PreMasterHash( 'CCC' )
    ---------------------


        'CCC' (0x434343) + PreMasterSecret + ClientRandom + ServerRandom:

            43 43 43 f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2
            32 87 5e 23 97 87 b6 91 65 21 bb 7a fb 29 5b 7e
            19 74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82
            16 10 bd f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2
            32 87 5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d
            78 f3 c5 7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80
            bf 8c 6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48
            74 85 7e


        Calculate SHA1 Hash of above:

            40 6f 23 e7 da 94 1a 5f 29 ec 11 a6 38 ad b7 91 13 2c 03 e6

        PreMasterSecret + SHA1Hash:

            f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e 23 97 87 b6 91 65 21 bb
            7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16 10 bd
            40 6f 23 e7 da 94 1a 5f 29 ec 11 a6 38 ad b7 91 13 2c 03 e6


        MD5Hash of the above:

            7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36 14 b4


    MasterSecret = PreMasterHash( 0x41 'A' ) + PreMasterHash( 0x4242 'BB' ) + PreMasterHash( 0x434343 'CCC' ):

        03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22 a9 f8
        c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d 9d c9
        7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36 14 b4


    SessionKeyBlob = MasterHash( 0x58 'X' ) + MasterHash( 0x5959 'YY' ) + MasterHash( 0x5A5A5A 'ZZZ' )


    MasterHash( 'X' )
    ------------------

        'X' (0x58) + MasterSecret + ClientRandom + ServerRandom:

            58 03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22 a9
            f8 c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d 9d
            c9 7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36 14
            b4 f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87
            5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78 f3
            c5 7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c
            6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74 85 
            7e

        Calculate SHA1 Hash of above:

            ac e2 c1 6c f8 95 38 17 fd de c2 cf a6 c1 32 78 f3 8b 7d 25

        MasterSecret + SHA1Hash:

            03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22 a9 f8
            c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d 9d c9
            7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36 14 b4
            ac e2 c1 6c f8 95 38 17 fd de c2 cf a6 c1 32 78
            f3 8b 7d 25

        MD5Hash of the above:

            15 0e 4f 19 89 ae be 30 5f 08 ab 26 4a 2d 66 26


    MasterHash( 'YY' )
    ------------------


        'YY' (0x5959) + MasterSecret + ClientRandom + ServerRandom:

            59 59 03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22
            a9 f8 c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d
            9d c9 7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36
            14 b4 f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32
            87 5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78
            f3 c5 7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf
            8c 6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74
            85 7e


        Calculate SHA1 Hash of above:

            9f a9 d4 fd 6f 76 98 52 f5 10 22 4d 57 94 a5 a8 3b 57 3e 71

        MasterSecret + SHA1Hash:

            03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22 a9 f8
            c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d 9d c9
            7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36 14 b4
            9f a9 d4 fd 6f 76 98 52 f5 10 22 4d 57 94 a5 a8
            3b 57 3e 71


        MD5Hash of the above:

            ee d7 8c 87 7f c5 bf 60 46 35 63 f4 ea 86 76 fa


    MasterHash( 'ZZZ' )
    -------------------

        'ZZZ' (0x5A5A5A) + MasterSecret + ClientRandom + ServerRandom:

            5a 5a 5a 03 75 89 f4 30 6c 14 35 69 f5 66 db 28
            22 a9 f8 c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23
            6d 9d c9 7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13
            36 14 b4 f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2
            32 87 5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d
            78 f3 c5 7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80
            bf 8c 6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48
            74 85 7e


        Calculate SHA1 Hash of above:

            2d 6b d9 ed fa b8 7f 95 e0 07 45 1f a2 f4 04 b8 4a aa 55 ce

        MasterSecret + SHA1Hash:

            03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22 a9 f8
            c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d 9d c9
            7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36 14 b4
            2d 6b d9 ed fa b8 7f 95 e0 07 45 1f a2 f4 04 b8
            4a aa 55 ce

        MD5Hash of the above:

            f1 4d f1 d4 34 f1 d8 ea 2c d9 4a af 9a 05 84 f3

    SessionKeyBlob = MasterHash( 0x58 'X' ) + MasterHash( 0x5959 'YY' ) + MasterHash( 0x5A5A5A 'ZZZ' ):

        15 0e 4f 19 89 ae be 30 5f 08 ab 26 4a 2d 66 26
        ee d7 8c 87 7f c5 bf 60 46 35 63 f4 ea 86 76 fa
        f1 4d f1 d4 34 f1 d8 ea 2c d9 4a af 9a 05 84 f3

    MACKey128 = First128Bits( SessionKeyBlob ):

        15 0e 4f 19 89 ae be 30 5f 08 ab 26 4a 2d 66 26

    InitialServerEncryptKey128 = FinalHash(Second128Bits(SessionKeyBlob)):

        Second128Bits(SessionKeyBlob) + ClientRandom + ServerRandom:

            ee d7 8c 87 7f c5 bf 60 46 35 63 f4 ea 86 76 fa
            f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e
            23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78 f3 c5
            7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c
            e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74 85 7e

        MD5Hash of the above:

            59 8d b3 6b 64 bd 07 75 85 8a f6 28 5f ba 94 30


    InitialServerDecryptKey128 = FinalHash(Third128Bits(SessionKeyBlob)):

        Third128Bits(SessionKeyBlob) + ClientRandom + ServerRandom:

            f1 4d f1 d4 34 f1 d8 ea 2c d9 4a af 9a 05 84 f3
            f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e
            23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78 f3 c5
            7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c
            e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74 85 7e

        MD5Hash of the above:

            cd 8c 18 db d4 34 bd 2f 9e 9a 3d b4 ee 11 af 92

     

    OUTPUT
    ======

    MACKey:
        15 0e 4f 19 89 ae be 30 5f 08 ab 26 4a 2d 66 26

    ServerEncryption/ClientDecryption:

        59 8d b3 6b 64 bd 07 75 85 8a f6 28 5f ba 94 30

    ServerDecryption/ClientEncryption:

        cd 8c 18 db d4 34 bd 2f 9e 9a 3d b4 ee 11 af 92

     

     


    Bryan S. Burgin Senior Escalation Engineer Microsoft Protocol Open Specifications Team
    Saturday, December 3, 2011 1:14 AM
    Moderator

All replies

  • Hi, Felipt,

      Thanks for your question. One of our team member will look at your questions and respond soon.

     

     


    Hongwei Sun -MSFT
    Friday, October 21, 2011 3:06 PM
  • Hi, Felipt,

     

    I can help you with this.  Let me review this issue.

     


    Bryan S. Burgin Senior Escalation Engineer Microsoft Protocol Open Specifications Team
    Friday, October 21, 2011 5:52 PM
    Moderator
  • Hi Felipt

     

    Just a quick note that I'm still researching this for you.

     


    Bryan S. Burgin Senior Escalation Engineer Microsoft Protocol Open Specifications Team
    Wednesday, November 9, 2011 5:36 AM
    Moderator
  • Bryan,

    Thanks for your continued support. We are still interested. Also the request for the private exponent is so that we can try hashing messages in 4.1 and use that to confirm that our hasing algorithm works.

    Thanks

    Sunday, November 20, 2011 2:06 AM
  • Hi Felipt,

     

    Just another quick update that I'm still working on this for you.

     

     


    Bryan S. Burgin Senior Escalation Engineer Microsoft Protocol Open Specifications Team
    Wednesday, November 23, 2011 11:48 PM
    Moderator
  • Hi Felipt,

     

    Please let me know if the sample below resolves your issue:

     

    INPUT
    =====

    ClientRandom (32 bytes):

        f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78 f3 c5

    ServerRandom (32 bytes):

        7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74 85 7e

     

    PROCESS
    ========

    PreMasterSecret = First192Bits(ClientRandom) + First192Bits(ServerRandom)

        f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e 23 97 87 b6 91 65 21 bb
        7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16 10 bd

    MasterSecret = PreMasterHash( 0x41 'A' ) + PreMasterHash( 0x4242 'BB' ) + PreMasterHash( 0x434343 'CCC' )

    PreMasterHash( 'A' )
    ---------------------

        'A' (0x41) + PreMasterSecret + ClientRandom + ServerRandom:

            41 f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87
            5e 23 97 87 b6 91 65 21 bb 7a fb 29 5b 7e 19 74
            67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16 10
            bd f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87
            5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78 f3
            c5 7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c
            6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74 85
            7e

        Calculate SHA1 Hash of above:

            14 cf 3a 70 31 ee cb bb a8 9b 7b f3 0b b1 02 c3 3a 55 67 be

        PreMasterSecret + SHA1Hash:

            f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e 23 97 87 b6 91 65 21 bb
            7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16 10 bd
            14 cf 3a 70 31 ee cb bb a8 9b 7b f3 0b b1 02 c3 3a 55 67 be

        MD5Hash of the above:

            03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22 a9 f8


    PreMasterHash( 'BB' )
    ---------------------

        'BB' (0x4242) + PreMasterSecret + ClientRandom + ServerRandom:

            42 42 f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32
            87 5e 23 97 87 b6 91 65 21 bb 7a fb 29 5b 7e 19
            74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16
            10 bd f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32
            87 5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78
            f3 c5 7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf
            8c 6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74
            85 7e

        Calculate SHA1 Hash of above:

            99 3a 3c e5 2a 5c 49 3f 49 b0 16 3a 40 b3 40 0d 97 ce d4 9e

        PreMasterSecret + SHA1Hash:

            f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e 23 97 87 b6 91 65 21 bb
            7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16 10 bd
            99 3a 3c e5 2a 5c 49 3f 49 b0 16 3a 40 b3 40 0d 97 ce d4 9e

        MD5Hash of the above:

            c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d 9d c9


    PreMasterHash( 'CCC' )
    ---------------------


        'CCC' (0x434343) + PreMasterSecret + ClientRandom + ServerRandom:

            43 43 43 f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2
            32 87 5e 23 97 87 b6 91 65 21 bb 7a fb 29 5b 7e
            19 74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82
            16 10 bd f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2
            32 87 5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d
            78 f3 c5 7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80
            bf 8c 6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48
            74 85 7e


        Calculate SHA1 Hash of above:

            40 6f 23 e7 da 94 1a 5f 29 ec 11 a6 38 ad b7 91 13 2c 03 e6

        PreMasterSecret + SHA1Hash:

            f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e 23 97 87 b6 91 65 21 bb
            7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c e0 16 4b 03 82 16 10 bd
            40 6f 23 e7 da 94 1a 5f 29 ec 11 a6 38 ad b7 91 13 2c 03 e6


        MD5Hash of the above:

            7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36 14 b4


    MasterSecret = PreMasterHash( 0x41 'A' ) + PreMasterHash( 0x4242 'BB' ) + PreMasterHash( 0x434343 'CCC' ):

        03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22 a9 f8
        c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d 9d c9
        7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36 14 b4


    SessionKeyBlob = MasterHash( 0x58 'X' ) + MasterHash( 0x5959 'YY' ) + MasterHash( 0x5A5A5A 'ZZZ' )


    MasterHash( 'X' )
    ------------------

        'X' (0x58) + MasterSecret + ClientRandom + ServerRandom:

            58 03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22 a9
            f8 c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d 9d
            c9 7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36 14
            b4 f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87
            5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78 f3
            c5 7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c
            6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74 85 
            7e

        Calculate SHA1 Hash of above:

            ac e2 c1 6c f8 95 38 17 fd de c2 cf a6 c1 32 78 f3 8b 7d 25

        MasterSecret + SHA1Hash:

            03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22 a9 f8
            c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d 9d c9
            7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36 14 b4
            ac e2 c1 6c f8 95 38 17 fd de c2 cf a6 c1 32 78
            f3 8b 7d 25

        MD5Hash of the above:

            15 0e 4f 19 89 ae be 30 5f 08 ab 26 4a 2d 66 26


    MasterHash( 'YY' )
    ------------------


        'YY' (0x5959) + MasterSecret + ClientRandom + ServerRandom:

            59 59 03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22
            a9 f8 c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d
            9d c9 7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36
            14 b4 f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32
            87 5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78
            f3 c5 7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf
            8c 6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74
            85 7e


        Calculate SHA1 Hash of above:

            9f a9 d4 fd 6f 76 98 52 f5 10 22 4d 57 94 a5 a8 3b 57 3e 71

        MasterSecret + SHA1Hash:

            03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22 a9 f8
            c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d 9d c9
            7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36 14 b4
            9f a9 d4 fd 6f 76 98 52 f5 10 22 4d 57 94 a5 a8
            3b 57 3e 71


        MD5Hash of the above:

            ee d7 8c 87 7f c5 bf 60 46 35 63 f4 ea 86 76 fa


    MasterHash( 'ZZZ' )
    -------------------

        'ZZZ' (0x5A5A5A) + MasterSecret + ClientRandom + ServerRandom:

            5a 5a 5a 03 75 89 f4 30 6c 14 35 69 f5 66 db 28
            22 a9 f8 c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23
            6d 9d c9 7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13
            36 14 b4 f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2
            32 87 5e 23 97 87 b6 91 65 21 bb c6 b0 86 81 1d
            78 f3 c5 7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80
            bf 8c 6c e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48
            74 85 7e


        Calculate SHA1 Hash of above:

            2d 6b d9 ed fa b8 7f 95 e0 07 45 1f a2 f4 04 b8 4a aa 55 ce

        MasterSecret + SHA1Hash:

            03 75 89 f4 30 6c 14 35 69 f5 66 db 28 22 a9 f8
            c7 3a ab 7a 66 0f 8e 65 76 af aa 56 23 6d 9d c9
            7b bc 03 05 4a c9 5e 2a 76 4c 65 3a 13 36 14 b4
            2d 6b d9 ed fa b8 7f 95 e0 07 45 1f a2 f4 04 b8
            4a aa 55 ce

        MD5Hash of the above:

            f1 4d f1 d4 34 f1 d8 ea 2c d9 4a af 9a 05 84 f3

    SessionKeyBlob = MasterHash( 0x58 'X' ) + MasterHash( 0x5959 'YY' ) + MasterHash( 0x5A5A5A 'ZZZ' ):

        15 0e 4f 19 89 ae be 30 5f 08 ab 26 4a 2d 66 26
        ee d7 8c 87 7f c5 bf 60 46 35 63 f4 ea 86 76 fa
        f1 4d f1 d4 34 f1 d8 ea 2c d9 4a af 9a 05 84 f3

    MACKey128 = First128Bits( SessionKeyBlob ):

        15 0e 4f 19 89 ae be 30 5f 08 ab 26 4a 2d 66 26

    InitialServerEncryptKey128 = FinalHash(Second128Bits(SessionKeyBlob)):

        Second128Bits(SessionKeyBlob) + ClientRandom + ServerRandom:

            ee d7 8c 87 7f c5 bf 60 46 35 63 f4 ea 86 76 fa
            f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e
            23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78 f3 c5
            7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c
            e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74 85 7e

        MD5Hash of the above:

            59 8d b3 6b 64 bd 07 75 85 8a f6 28 5f ba 94 30


    InitialServerDecryptKey128 = FinalHash(Third128Bits(SessionKeyBlob)):

        Third128Bits(SessionKeyBlob) + ClientRandom + ServerRandom:

            f1 4d f1 d4 34 f1 d8 ea 2c d9 4a af 9a 05 84 f3
            f1 0b 35 78 df 9e cc 37 9c 4e 65 68 f2 32 87 5e
            23 97 87 b6 91 65 21 bb c6 b0 86 81 1d 78 f3 c5
            7a fb 29 5b 7e 19 74 67 ae 88 a1 ad 80 bf 8c 6c
            e0 16 4b 03 82 16 10 bd a2 8c 85 5f 48 74 85 7e

        MD5Hash of the above:

            cd 8c 18 db d4 34 bd 2f 9e 9a 3d b4 ee 11 af 92

     

    OUTPUT
    ======

    MACKey:
        15 0e 4f 19 89 ae be 30 5f 08 ab 26 4a 2d 66 26

    ServerEncryption/ClientDecryption:

        59 8d b3 6b 64 bd 07 75 85 8a f6 28 5f ba 94 30

    ServerDecryption/ClientEncryption:

        cd 8c 18 db d4 34 bd 2f 9e 9a 3d b4 ee 11 af 92

     

     


    Bryan S. Burgin Senior Escalation Engineer Microsoft Protocol Open Specifications Team
    Saturday, December 3, 2011 1:14 AM
    Moderator
  • Bryan,

    Wow! That was wonderful. Thank you so much! That should be a part of the documentation!

     

    Saturday, December 3, 2011 5:38 PM