Здравствуйте. Не могу найти информацию, как получить Master Secret из компонентов: Client Random, Server Random, PreMasterSecret . Это всё есть в byte[]. Пожалуйста, подскажите как вычислить MasterSecret в C#. Желательно с кодами на C#
Это зависит от выбранного набора шифров (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);
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости