(TLS) Вычисление Master Secret в C#

166
24 января 2018, 12:52

Здравствуйте. Не могу найти информацию, как получить Master Secret из компонентов: Client Random, Server Random, PreMasterSecret . Это всё есть в byte[]. Пожалуйста, подскажите как вычислить MasterSecret в C#. Желательно с кодами на C#

Answer 1

Это зависит от выбранного набора шифров (cipher suite), и от того, включено ли расширение Extended Master Secret. Лучше посмотрите исходники, как все работает. Для C# есть реализация TLS от BouncyCastle.

В меня есть своя учебная реализация TLS, конкретный метод вычисления Master Secret здесь: https://github.com/Zergatul/ZergatulLib/blob/master/Zergatul/Network/Tls/CipherSuiteBuilder.cs#L67

// включено ли расширение
if (SecurityParameters.ExtendedMasterSecret)
{
    // Hash может быть SHA256 или SHA384 в зависимости от Cipher Suite
    // HandshakeData - все переданные байты в сообщениях
    var sessionHash = Hash(SecurityParameters.HandshakeData.ToArray());
    // PseudoRandomFunction - стандартная функция для TLS 1.2 описана в RFC 5246
    SecurityParameters.MasterSecret = PseudoRandomFunction(
        KeyExchange.PreMasterSecret,
        "extended master secret",
        sessionHash,
        48);
}
else
{
    SecurityParameters.MasterSecret = PseudoRandomFunction(
        KeyExchange.PreMasterSecret,
        "master secret",
        ByteArray.Concat(SecurityParameters.ClientRandom, SecurityParameters.ServerRandom),
        48);
}
READ ALSO
C# сравнения двух сложных объектов [требует правки]

C# сравнения двух сложных объектов [требует правки]

Никак не получается сделать рабочий кодЕсть у меня два экземпляра структуры, и нужно, чтобы исполнялся цикл do while до тех пор, пока counter не будет...

172
Socket и Windnows Form App

Socket и Windnows Form App

Загуглил самый простой клиент-сервер на сокетах C#Проверил работоспособность кода

187
C# cинхронизация потоков

C# cинхронизация потоков

Возникла проблема с синхронизацией потоковОбщая схема упрощенно в следующем

175
C# Прием файла по сети

C# Прием файла по сети

Пишу клиент серверное приложение, в котором передаются файлы по сетиСобственно, само приложение работает хорошо, задачи выполняет, но когда...

211