С точки зрения функциональности, система HDCP, как это было задумано, должна решать три главных задачи: (1) она шифрует контент так, чтобы его нельзя было брать от кабеля; (2) она позволяет каждому оконечному устройству удостовериться, что другая оконечная точка связи - это тоже HDCP-лицензированное устройство; и (3) она позволяет "отзывать" уникальные ключи прежде легитимных, но впоследствии скомпрометированных пиратами устройств, создавая "черные списки" заблокированных ключей.
С точки зрения собственно защиты информации, принципиально важным этапом в работе системы HDCP является процедура начального "рукопожатия", в ходе которой формируется общий секретный ключ, который затем используется для шифрования коммуникаций между двумя устройствами. В то же самое время данная процедура позволяет каждому устройству удостовериться, что другое устройство является лицензированным для обработки HD-контента.
Всякий раз, когда речь заходит о криптотехнологии, исходная позиция для понимания конструкции системы - это разобраться с работой секретных ключей: сколько именно таких ключей предусмотрено, кому конкретно они известны и как именно они применяются.
В HDCP каждое устройство имеет уникальную пару ключей: один открытый ключ, который не является тайной; и один секретный ключ, который положено знать исключительно только этому устройству. Кроме того, система в целом имеет один-единственный мастер-ключ, который предполагается известным исключительно Центральному органу, управляющему всей системой HDCP. А также имеется особый алгоритм генерации ключей (который по давней традиции удобно для краткости называть Keygen), используемый Центром для формирования секретных ключей устройств. Этот генератор ключей на основе секретного мастер-ключа Центра и открытого ключа устройства неким хитрым способом формирует уникальный секретный ключ, который соответствует исключительно данному открытому ключу. Поскольку генератор ключа использует секретный мастер-ключ, заниматься созданием ключевых пар может только центральный орган власти.
Каждое HDCP-лицензированное устройство (например, Blu-Ray-плеер или HD-телевизор) имеет зашитые в него открытый ключ и соответствующий ему секретный ключ. Чтобы получить эти ключи для своих устройств, их изготовителям нужно содействие центрального органа власти HDCP, потому что лишь там занимаются генерацией и раздачей легитимных ключевых пар.
Теперь предположим, что два устройства, которые для простоты называют А и Б, собираются выполнить процедуру "рукопожатия". Для этого А посылает свой открытый ключ в Б, а Б, соответственно, свой открытый ключ в А. После чего каждая из сторон по заранее известному правилу комбинирует свой собственный секретный ключ с открытым ключом партнера, чтобы в результате получить общий секретный ключ для шифрования сеанса связи. Этот сеансовый ключ предполагается секретным - то есть известным исключительно сторонам А и Б - потому что для порождения общего ключа обязательно требуется знать либо секретный ключ А, либо секретный ключ Б.
Надо подчеркнуть, что для получения этого общего секрета А и Б фактически выполняют разные вычисления. Ведь А комбинирует свой секретный ключ с открытым ключом Б, а Б, наоборот, комбинирует свой секрет с открытой информацией от А. Если "случайно повстречавшиеся" А и Б производят существенно разные вычисления, то возникает естественный вопрос: каким образом в итоге у них получится один и тот же результат? Чтобы ответить на этот вопрос с исчерпывающей полнотой, понадобилось бы без нужды углубляться в дебри алгебраических уравнений. Здесь же вполне достаточно ограничится кратким ответом: потому что таким образом устроены математические свойства алгоритма Keygen.
Принципиально важно, что от этой особенности критически зависит безопасность всей криптосистемы: если ваше устройство имеет секретный ключ, изготовленный в процессе работы Keygen, тогда "рукопожатие HDCP" для вас сработает - в том смысле, что в итоге вычислений это устройство получит тот же самый общий ключ, что и вторая легитимная сторона на другом конце кабеля. Но если же вы пытались применить какой-нибудь левый или случайный "секретный ключ", который сгенерировали сами, тогда рукопожатие не сработает: вы придете к совершенно иному сеансовому ключу, нежели у второй стороны, поэтому устройства не смогут связаться друг с другом.
Если эти нюансы ясны, вполне можно понять и последствия того, что ныне опубликован секретный мастер-ключ HDCP. Теперь абсолютно любой, кто знает мастер-ключ, может сам выполнять сакральную процедуру Keygen. А это, в свою очередь, эффективно удаляет все важнейшие функции защиты, которые должна обеспечивать HDCP.
От шифрования HDCP нет никакого проку, поскольку перехватчик, который видит начальное рукопожатие, может сам применить Keygen для вычисления секретных ключей связывающихся сторон. А это, ясное дело, позволяет перехватчику легко вычислить и сеансовый ключ шифрования, защищающего передачу контента.