Esempio n. 1
0
        public void Aes128_Encrypt_Sha256_Roundtrip()
        {
            /*
             * Plaintext: (length equals block size)
             *     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
             * Confounder:
             *     56 AB 21 71 3F F6 2C 0A 14 57 20 0F 6F A9 94 8F
             * 128-bit AES key (Ke):
             *     9B 19 7D D1 E8 C5 60 9D 6E 67 C3 E3 7C 62 C7 2E
             * 128-bit HMAC key (Ki):
             *     9F DA 0E 56 AB 2D 85 E1 56 9A 68 86 96 C2 6A 6C
             * AES Output:
             *     35 17 D6 40 F5 0D DC 8A D3 62 87 22 B3 56 9D 2A
             *     e0 74 93 FA 82 63 25 40 80 EA 65 C1 00 8E 8F C2
             * Truncated HMAC Output:
             *     95 FB 48 52 E7 D8 3E 1E 7C 48 C3 7E EB E6 B0 D3
             * Ciphertext:
             *     35 17 D6 40 F5 0D DC 8A D3 62 87 22 B3 56 9D 2A
             *     e0 74 93 FA 82 63 25 40 80 EA 65 C1 00 8E 8F C2
             *     95 FB 48 52 E7 D8 3E 1E 7C 48 C3 7E EB E6 B0 D3
             */

            var key = new KerberosKey(key: HexToByte(Aes128Sha256BaseKey), etype: EncryptionType.AES128_CTS_HMAC_SHA256_128);

            var plaintext     = HexToByte(CompleteOneBlock);
            var expectedBytes = HexToByte("35 17 D6 40 F5 0D DC 8A D3 62 87 22 B3 56 9D 2A E0 74 93 FA 82 63 25 40 80 EA 65 C1 00 8E 8F C2 95 FB 48 52 E7 D8 3E 1E 7C 48 C3 7E EB E6 B0 D3");

            AES128Sha256TransformerEx transformer = new AES128Sha256TransformerEx();

            transformer.SetConfounder(HexToByte("56 AB 21 71 3F F6 2C 0A 14 57 20 0F 6F A9 94 8F"));

            var output = transformer.Encrypt(
                plaintext,
                key,
                KeyUsage.Ticket
                );

            AssertArrayEquals(expectedBytes, output);

            var decrypted = transformer.Decrypt(output, key, KeyUsage.Ticket);

            AssertArrayEquals(plaintext, decrypted);
        }
Esempio n. 2
0
        public void Aes128_Sha256_Iter32768_Managed()
        {
            Rfc2898DeriveBytes.AttemptReflectionLookup     = false;
            Rfc2898DeriveBytes.RequireNativeImplementation = false;

            /*
             * Iteration count = 32768
             * Pass phrase = "password"
             * Saltp for creating 128-bit base-key:
             *     61 65 73 31 32 38 2D 63 74 73 2D 68 6D 61 63 2D
             *     73 68 61 32 35 36 2D 31 32 38 00 10 DF 9D D7 83
             *     e5 BC 8A CE A1 73 0E 74 35 5F 61 41 54 48 45 4E
             *     41 2E 4D 49 54 2E 45 44 55 72 61 65 62 75 72 6E
             *
             * (The saltp is "aes128-cts-hmac-sha256-128" | 0x00 |
             *     random 16-byte valid UTF-8 sequence | "ATHENA.MIT.EDUraeburn")
             * 128-bit base-key:
             *     08 9B CA 48 B1 05 EA 6E A7 7C A5 D2 F3 9D C5 E7
             */

            var expectedBytes = HexToByte("08 9B CA 48 B1 05 EA 6E A7 7C A5 D2 F3 9D C5 E7");
            var saltBytes     = HexToByte("10 DF 9D D7 83 E5 BC 8A CE A1 73 0E 74 35 5F 61 41 54 48 45 4E 41 2E 4D 49 54 2E 45 44 55 72 61 65 62 75 72 6E");

            AES128Sha256TransformerEx transformer = new AES128Sha256TransformerEx();

            var iterations = new byte[4];

            BinaryPrimitives.WriteInt32BigEndian(iterations, 32768);

            var key = transformer.String2Key(
                new KerberosKey(
                    "password",
                    saltBytes: saltBytes,
                    etype: EncryptionType.AES128_CTS_HMAC_SHA256_128,
                    iterationParams: iterations
                    )
                );

            AssertArrayEquals(expectedBytes, key);

            Assert.IsFalse(Rfc2898DeriveBytes.AttemptReflectionLookup);
        }
Esempio n. 3
0
        public void Aes128_KeyDerivation_Integrity()
        {
            /*
             * enctype aes128-cts-hmac-sha256-128:
             * 128-bit base-key:
             *     37 05 D9 60 80 C1 77 28 A0 E8 00 EA B6 E0 D2 3C
             * Kc value for key usage 2 (label = 0x0000000299):
             *     B3 1A 01 8A 48 F5 47 76 F4 03 E9 A3 96 32 5D C3
             * Ke value for key usage 2 (label = 0x00000002AA):
             *     9B 19 7D D1 E8 C5 60 9D 6E 67 C3 E3 7C 62 C7 2E
             * Ki value for key usage 2 (label = 0x0000000255):
             *     9F DA 0E 56 AB 2D 85 E1 56 9A 68 86 96 C2 6A 6C
             */

            var key      = new KerberosKey(key: HexToByte(Aes128Sha256BaseKey));
            var expected = HexToByte("9F DA 0E 56 AB 2D 85 E1 56 9A 68 86 96 C2 6A 6C");

            var transformer = new AES128Sha256TransformerEx();

            var derived = transformer.GetOrDeriveKey(key, KeyUsage.Ticket, KeyDerivationMode.Ki);

            AssertArrayEquals(expected, derived);
        }