HDCP: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м орфография, пунктуация, typos fixed: объем → объём, прошел → прошёл, <br/> → <br /> (6) с помощью AWB
Строка 4: Строка 4:
'''HDCP''' ({{lang-en|High-bandwidth Digital Content Protection}} — «защита широкополосного цифрового содержимого») — технология защиты медиаконтента, разработанная корпорацией [[Intel]]<ref>{{Citation | title = Digital Content Protection - About DCP | url = http://www.digital-cp.com/about_dcp}}</ref> и предназначенная для предотвращения незаконного копирования [[HDTV|высококачественного видеосигнала]], передаваемого через интерфейсы [[Digital Visual Interface|DVI]] (для этого интерфейса HDCP является необязательной опцией<ref name=HDCP_1.4>{{cite web|url=http://www.digital-cp.com/files/static_page_files/5C3DC13B-9F6B-D82E-D77D8ACA08A448BF/HDCP%20Specification%20Rev1_4.pdf|format=pdf|title=HDCP v1.4 specification|work=Digital Content Protection|date=2009-07-08|archiveurl=http://www.webcitation.org/65ihPBqxB|archivedate=2012-02-25}}, ''Страница 31 0x15, Страница 35''</ref>), [[DisplayPort]] (для этого интерфейса HDCP является необязательной опцией), [[HDMI]], [[Gigabit Video Interface|GVIF]] или [[Unified Display Interface|UDI]]. Защищённый видеосигнал может быть воспроизведён только на оборудовании, поддерживающем HDCP.
'''HDCP''' ({{lang-en|High-bandwidth Digital Content Protection}} — «защита широкополосного цифрового содержимого») — технология защиты медиаконтента, разработанная корпорацией [[Intel]]<ref>{{Citation | title = Digital Content Protection - About DCP | url = http://www.digital-cp.com/about_dcp}}</ref> и предназначенная для предотвращения незаконного копирования [[HDTV|высококачественного видеосигнала]], передаваемого через интерфейсы [[Digital Visual Interface|DVI]] (для этого интерфейса HDCP является необязательной опцией<ref name=HDCP_1.4>{{cite web|url=http://www.digital-cp.com/files/static_page_files/5C3DC13B-9F6B-D82E-D77D8ACA08A448BF/HDCP%20Specification%20Rev1_4.pdf|format=pdf|title=HDCP v1.4 specification|work=Digital Content Protection|date=2009-07-08|archiveurl=http://www.webcitation.org/65ihPBqxB|archivedate=2012-02-25}}, ''Страница 31 0x15, Страница 35''</ref>), [[DisplayPort]] (для этого интерфейса HDCP является необязательной опцией), [[HDMI]], [[Gigabit Video Interface|GVIF]] или [[Unified Display Interface|UDI]]. Защищённый видеосигнал может быть воспроизведён только на оборудовании, поддерживающем HDCP.


Система шифрования была окончательно взломана в 2010 году.<ref name=KO/>
Система шифрования была окончательно взломана в 2010 году<ref name=KO/>.


== Технология ==
== Технология ==
HDCP создана для защиты передачи медиаконтента между HDCP-передатчиком и HDCP-приемником. Технология также предусматривает использование HDCP-повторителей с защищёнными портами для нисходящего потока данных (от поставщика к заказчику услуги). В системе возможно до семи уровней HDCP-повторителей и до 128 HDCP-совместимых устройств.
HDCP создана для защиты передачи медиаконтента между HDCP-передатчиком и HDCP-приёмником. Технология также предусматривает использование HDCP-повторителей с защищёнными портами для нисходящего потока данных (от поставщика к заказчику услуги). В системе возможно до семи уровней HDCP-повторителей и до 128 HDCP-совместимых устройств.
Система защиты состоит из трех основных компонентов:
Система защиты состоит из трёх основных компонентов:
* Протокол аутентификации
* Протокол аутентификации
* Шифрование передаваемых данных
* Шифрование передаваемых данных
Строка 15: Строка 15:


== Нахождение секретной матрицы DCP LLC ==
== Нахождение секретной матрицы DCP LLC ==
14 сентября 2010 несколько онлайн СМИ (ZDNet, Engadget) сообщили о факте открытой публикации мастер ключа HDCP, с помощью которого можно создавать закрытые ключи устройств HDCP (''device private keys'') без помощи со стороны оператора ключевой инфраструктуры HDCP (''The Digital Content Protection LLC''). C публикацией мастер ключа были нейтрализованы все меры по отзыву ключей устройств, так как вместо старого (отозванного) ключа устройства всегда можно сгенерировать новый.<ref>{{cite web
14 сентября 2010 несколько онлайн СМИ (ZDNet, Engadget) сообщили о факте открытой публикации мастер ключа HDCP, с помощью которого можно создавать закрытые ключи устройств HDCP (''device private keys'') без помощи со стороны оператора ключевой инфраструктуры HDCP (''The Digital Content Protection LLC''). C публикацией мастер ключа были нейтрализованы все меры по отзыву ключей устройств, так как вместо старого (отозванного) ключа устройства всегда можно сгенерировать новый<ref>{{cite web
| url = http://www.zdnet.com/blog/hardware/high-bandwidth-digital-content-protection-hdcp-could-be-fatally-busted/9697
| url = http://www.zdnet.com/blog/hardware/high-bandwidth-digital-content-protection-hdcp-could-be-fatally-busted/9697
| title = High-bandwidth Digital Content Protection (HDCP) could be fatally busted
| title = High-bandwidth Digital Content Protection (HDCP) could be fatally busted
Строка 23: Строка 23:
| archiveurl = http://www.webcitation.org/6HPJs5Xj0
| archiveurl = http://www.webcitation.org/6HPJs5Xj0
| archivedate = 2013-06-16
| archivedate = 2013-06-16
}}</ref><ref name="Lawler">{{cite web |url=http://www.engadget.com/2010/09/14/hdcp-master-key-supposedly-released-unlocks-hdtv-copy-protect/ |title=HDCP 'master key' supposedly released, unlocks HDTV copy protection permanently |first=Richard |last=Lawler |publisher=Engadget |accessdate=September 14, 2010}}</ref> Не вполне ясно, каким образом был получен мастер ключ, известно, что публикация ключа вместе с инструкцией по использованию произошла через Twitter и pastebin. Engadget считает, что атакующий мог использовать метод Crosby (2001).
}}</ref><ref name="Lawler">{{cite web |url=http://www.engadget.com/2010/09/14/hdcp-master-key-supposedly-released-unlocks-hdtv-copy-protect/ |title=HDCP 'master key' supposedly released, unlocks HDTV copy protection permanently |first=Richard |last=Lawler |publisher=Engadget |accessdate=September 14, 2010}}</ref>. Не вполне ясно, каким образом был получен мастер ключ, известно, что публикация ключа вместе с инструкцией по использованию произошла через Twitter и pastebin. Engadget считает, что атакующий мог использовать метод Crosby (2001).


Через 2 дня, 16 сентября, компания [[Intel]] (создатель HDCP) подтвердила, что данный мастер ключ реален и что защита HDCP фактически взломана.<ref>{{cite news| url=http://www.foxnews.com/scitech/2010/09/16/intel-confirms-hdtv-code-cracked/ | work=Fox News | title=HDTV Code Crack Is Real, Intel Confirms | date=2010-09-16}}</ref><ref>[http://www.tomshardware.com/news/hdcp-master-key-copy-protection,11311.html Intel Confirms That HDCP Master Key is Cracked<!-- Bot generated title -->]</ref><ref name=KO>{{cite web
Через 2 дня, 16 сентября, компания [[Intel]] (создатель HDCP) подтвердила, что данный мастер ключ реален и что защита HDCP фактически взломана<ref>{{cite news| url=http://www.foxnews.com/scitech/2010/09/16/intel-confirms-hdtv-code-cracked/ | work=Fox News | title=HDTV Code Crack Is Real, Intel Confirms | date=2010-09-16}}</ref>.<ref>[http://www.tomshardware.com/news/hdcp-master-key-copy-protection,11311.html Intel Confirms That HDCP Master Key is Cracked<!-- Bot generated title -->]</ref><ref name=KO>{{cite web
|url = http://www.computerra.ru/own/kiwi/563451/
|url = http://www.computerra.ru/own/kiwi/563451/
|title = Конец эпохи. Криптосистема HDCP взломана полностью и окончательно
|title = Конец эпохи. Криптосистема HDCP взломана полностью и окончательно
Строка 31: Строка 31:
|publisher = Компьютерра онлайн
|publisher = Компьютерра онлайн
|date = 20 сентября 2010 года
|date = 20 сентября 2010 года
}}</ref>. Intel угрожает, что предпримет юридические действия против любого, кто изготавливает аппаратные устройства для обхода защиты HDCP.<ref name="w2">Wired. «[http://www.wired.com/threatlevel/2010/09/intel-threatens-consumers/ Intel Threatens to Sue Anyone Who Uses HDCP Crack]».</ref>
}}</ref>. Intel угрожает, что предпримет юридические действия против любого, кто изготавливает аппаратные устройства для обхода защиты HDCP<ref name="w2">Wired. «[http://www.wired.com/threatlevel/2010/09/intel-threatens-consumers/ Intel Threatens to Sue Anyone Who Uses HDCP Crack]».</ref>.


== Протокол аутентификации ==
== Протокол аутентификации ==
Протокол аутентификации используется между HDCP-передатчиком и HDCP-приемником для подтверждения того, что последний является устройством, которому разрешено получать соответствующий [[HDTV|контент]]. Подтверждение — знание секретного набора ключей. Каждое HDCP-устройство снабжается уникальным набором из сорока 56-битных секретных ключей, называемых DPK ({{lang-en|device private keys}}, секретные ключи устройства), получаемых от организации [http://www.digital-cp.com/ DCP LLC]. Во время обмена информацией устройства создают общий секрет, который нельзя подслушать во время этого обмена, и этот секрет далее применяется как симметричный ключ для расшифровки HDCP-контента, предназначенного устройству, прошедшему аутентификацию.
Протокол аутентификации используется между HDCP-передатчиком и HDCP-приёмником для подтверждения того, что последний является устройством, которому разрешено получать соответствующий [[HDTV|контент]]. Подтверждение — знание секретного набора ключей. Каждое HDCP-устройство снабжается уникальным набором из сорока 56-битных секретных ключей, называемых DPK ({{lang-en|device private keys}}, секретные ключи устройства), получаемых от организации [http://www.digital-cp.com/ DCP LLC]. Во время обмена информацией устройства создают общий секрет, который нельзя подслушать во время этого обмена, и этот секрет далее применяется как симметричный ключ для расшифровки HDCP-контента, предназначенного устройству, прошедшему аутентификацию.


Каждое HDCP-устройство хранит, помимо Device Private Keys, соответствующий 40-битный идентификатор — {{нп5|Key selection vector|KSV||Key selection vector}} ({{lang-en|key selection vector}}, вектор выбора ключа), который, так же как и DPK, получает от DCP LLC.
Каждое HDCP-устройство хранит, помимо Device Private Keys, соответствующий 40-битный идентификатор — {{нп5|Key selection vector|KSV||Key selection vector}} ({{lang-en|key selection vector}}, вектор выбора ключа), который, так же как и DPK, получает от DCP LLC.
Строка 47: Строка 47:


На рисунке изображена первая часть работы протокола аутентификации.
На рисунке изображена первая часть работы протокола аутентификации.
Первым шагом HDCP-передатчик (''устройство А'') посылает инициирующее сообщение HDCP-приемнику (''устройство B''). Сообщение содержит KSV передатчика (''Aksv'') и 64-битное псевдослучайное число (''An'') (число генерируется функцией '''hdcpRngCipher''').
Первым шагом HDCP-передатчик (''устройство А'') посылает инициирующее сообщение HDCP-приёмнику (''устройство B''). Сообщение содержит KSV передатчика (''Aksv'') и 64-битное псевдослучайное число (''An'') (число генерируется функцией '''hdcpRngCipher''').


Передатчик может начать процедуру проверки подлинности в любой момент, даже если предыдущая только что завершилась.
Передатчик может начать процедуру проверки подлинности в любой момент, даже если предыдущая только что завершилась.


Вторым шагом HDCP-приемник отвечает сообщением с KSV приемника (''Bksv'') и битом '''REPEATER''' (повторитель), который указывает, является ли ''устройство B'' повторителем или нет. HDCP-передатчик проверяет, что ''Aksv'' содержит ровно 20 нулей и 20 единиц и не находится в чёрном списке.
Вторым шагом HDCP-приёмник отвечает сообщением с KSV приёмника (''Bksv'') и битом '''REPEATER''' (повторитель), который указывает, является ли ''устройство B'' повторителем или нет. HDCP-передатчик проверяет, что ''Aksv'' содержит ровно 20 нулей и 20 единиц и не находится в чёрном списке.


На этом этапе в обоих устройствах вычисляется общий 56-битный секрет ''Km'' и ''Km’''.
На этом этапе в обоих устройствах вычисляется общий 56-битный секрет ''Km'' и ''Km’''.
Строка 61: Строка 61:


<div style="padding:1ex; padding-left:2em;"><tt>'''Пример:'''
<div style="padding:1ex; padding-left:2em;"><tt>'''Пример:'''
Предположим, ''Bksv'' равно 0x5A3. В двоичном представлении — 10110100011.<br/>
Предположим, ''Bksv'' равно 0x5A3. В двоичном представлении — 10110100011.<br />
Следовательно, ''Устройство А'' складывает свои секретные ключи, стоящие на позициях 0, 1, 5, 7, 8, 10 и рассчитывает общий секрет ''Km''.
Следовательно, ''Устройство А'' складывает свои секретные ключи, стоящие на позициях 0, 1, 5, 7, 8, 10 и рассчитывает общий секрет ''Km''.


''Устройство В'' проделывает аналогичные вычисления, используя собственный набор секретных ключей
''Устройство В'' проделывает аналогичные вычисления, используя собственный набор секретных ключей
Строка 68: Строка 68:
</tt></div>
</tt></div>


На третьем шаге применяется функция '''hdcpBlockCipher''' для вычисления ''Ks'', ''M0'', ''R0''. Инициирующие величины для работы этой функции — ''Km'' (или ''Km’'') и конкатенация бита '''REPEATER''' с ''An'' (бит '''REPEATER''' указывает на то, что HDCP-приемник поддерживает дальнейшую передачу HDCP-контента, то есть является повторителем).
На третьем шаге применяется функция '''hdcpBlockCipher''' для вычисления ''Ks'', ''M0'', ''R0''. Инициирующие величины для работы этой функции — ''Km'' (или ''Km’'') и конкатенация бита '''REPEATER''' с ''An'' (бит '''REPEATER''' указывает на то, что HDCP-приёмник поддерживает дальнейшую передачу HDCP-контента, то есть является повторителем).
* ''Ks'' — 56-битный сессионный ключ для работы HDCP шифра
* ''Ks'' — 56-битный сессионный ключ для работы HDCP шифра
* ''M0'' — 64-битная секретная величина, используемая во второй части протокола аутентификации, а также как вспомогательный инициирующий вектор HDCP шифра.
* ''M0'' — 64-битная секретная величина, используемая во второй части протокола аутентификации, а также как вспомогательный инициирующий вектор HDCP шифра.
* ''R0’'' — 16-битный ответ, который видеоприемник посылает HDCP-передатчику в подтверждение успеха обмена сообщениями аутентификации. HDCP-передатчик должен прочитать ''R0’'' не позднее 100 миллисекунд после того как отправлено число ''Aksv'' видеоприемнику, если прошло больше времени, то считывать ''R0’'' нельзя.
* ''R0’'' — 16-битный ответ, который видеоприёмник посылает HDCP-передатчику в подтверждение успеха обмена сообщениями аутентификации. HDCP-передатчик должен прочитать ''R0’'' не позднее 100 миллисекунд после того как отправлено число ''Aksv'' видеоприёмнику, если прошло больше времени, то считывать ''R0’'' нельзя.


Если аутентификация прошла успешно, то ''R0 = R0’'', иначе в большинстве случаев неравны. Далее, при помощи ''Ri’'', получаемых в течение работы третьей части протокола, можно будет обнаружить, что аутентификация прошла неудачно, в том случае, если величина ''R0'' ошибочно указала успех аутентификации.
Если аутентификация прошла успешно, то ''R0 = R0’'', иначе в большинстве случаев неравны. Далее, при помощи ''Ri’'', получаемых в течение работы третьей части протокола, можно будет обнаружить, что аутентификация прошла неудачно, в том случае, если величина ''R0'' ошибочно указала успех аутентификации.
Строка 78: Строка 78:
[[Файл:authentication part2.svg]]
[[Файл:authentication part2.svg]]


Вторая часть протокола аутентификации требуется в том случае, если HDCP-приемник является HDCP-повторителем.
Вторая часть протокола аутентификации требуется в том случае, если HDCP-приёмник является HDCP-повторителем.
HDCP-передатчик выполняет вторую часть протокола только тогда, когда установлен бит '''REPEATER''' (повторитель),
HDCP-передатчик выполняет вторую часть протокола только тогда, когда установлен бит '''REPEATER''' (повторитель),
это значит, что HDCP-приемник — HDCP-повторитель.
это значит, что HDCP-приёмник — HDCP-повторитель.
Эта часть протокола составляет список всех KSV устройств, подключенных к HDCP-повторителю ниже по уровню:
Эта часть протокола составляет список всех KSV устройств, подключенных к HDCP-повторителю ниже по уровню:
HDCP-защищенные порты HDCP-повторителей, HDCP-приемники. Этот список представлен в виде непрерывного набора байтов,
HDCP-защищённые порты HDCP-повторителей, HDCP-приёмники. Этот список представлен в виде непрерывного набора байтов,
в котором каждый KSV занимает 5 байт, записанных в прямом порядке.
в котором каждый KSV занимает 5 байт, записанных в прямом порядке.


Общая длина KSV списка = 5 байт * число присоединенных активных HDCP устройств
Общая длина KSV списка = 5 байт * число присоединенных активных HDCP устройств


HDCP-защищенные порты с неактивными HDCP устройства ничего не добавляют в набор KSV, также как и сам HDCP-повторитель, инициирующий создание списка, не добавляет свой KSV в него.
HDCP-защищённые порты с неактивными HDCP устройства ничего не добавляют в набор KSV, также как и сам HDCP-повторитель, инициирующий создание списка, не добавляет свой KSV в него.


Для того чтобы добавить KSV список, полученный от предыдущего HDCP-повторителя, требуется проверка целостности. HDCP-повторитель, запросивший список, вычисляет ''V'' и сравнивает его с полученным ''V’''.
Для того чтобы добавить KSV список, полученный от предыдущего HDCP-повторителя, требуется проверка целостности. HDCP-повторитель, запросивший список, вычисляет ''V'' и сравнивает его с полученным ''V’''.
Строка 101: Строка 101:
Если ''V≠ V’'', то проверка на целостность считается неудачной и HDCP-повторитель не должен принимать список. При этом истечет таймер watchdog (сторожевой таймер) и HDCP-передатчик сумеет обнаружить эту ошибку.
Если ''V≠ V’'', то проверка на целостность считается неудачной и HDCP-повторитель не должен принимать список. При этом истечет таймер watchdog (сторожевой таймер) и HDCP-передатчик сумеет обнаружить эту ошибку.


Кроме составления списка KSV производится распространение топологической информации (количество и глубина) вверх по дереву устройств до HDCP-передатчика. Количество устройств ({{lang-en|device count}}) рассчитывается как количество всех HDCP-повторителей и приемников вниз от устройства, которое считает сумму. Глубина ({{lang-en|depth}}) для HDCP-повторителя равна максимальному значения глубины, полученному от нижестоящих в дереве устройств HDCP-повторителю, плюс один. Например, для HDCP-повторителя с четырьмя нижестоящими HDCP-получателями, глубина равна единице, а число устройств — четырём.
Кроме составления списка KSV производится распространение топологической информации (количество и глубина) вверх по дереву устройств до HDCP-передатчика. Количество устройств ({{lang-en|device count}}) рассчитывается как количество всех HDCP-повторителей и приёмников вниз от устройства, которое считает сумму. Глубина ({{lang-en|depth}}) для HDCP-повторителя равна максимальному значения глубины, полученному от нижестоящих в дереве устройств HDCP-повторителю, плюс один. Например, для HDCP-повторителя с четырьмя нижестоящими HDCP-получателями, глубина равна единице, а число устройств — четырём.


Число устройств в одном дереве не может превышать 127, а число уровней (глубина) — семи.
Число устройств в одном дереве не может превышать 127, а число уровней (глубина) — семи.


<div style="padding:1ex; padding-left:2em;"><tt>'''Пример:'''
<div style="padding:1ex; padding-left:2em;"><tt>'''Пример:'''
HDCP-передатчик, определив, что передан бит '''REPEATER''', устанавливает 5-секундный сторожевой таймер (watchdog) и запрашивает статус '''READY''' (готовность) у HDCP-повторителя. Если бит состояния установлен на 1 (готов), то HDCP-передатчик считывает список KSV и проверяет, не превышает ли список устройств установленный спецификацией объем и глубину, затем проверяет список на целостность, вычисляя ''V''. Если какое-либо из условий не выполнено или истекает время таймера, то аутентификация не производится.
HDCP-передатчик, определив, что передан бит '''REPEATER''', устанавливает 5-секундный сторожевой таймер (watchdog) и запрашивает статус '''READY''' (готовность) у HDCP-повторителя. Если бит состояния установлен на 1 (готов), то HDCP-передатчик считывает список KSV и проверяет, не превышает ли список устройств установленный спецификацией объём и глубину, затем проверяет список на целостность, вычисляя ''V''. Если какое-либо из условий не выполнено или истекает время таймера, то аутентификация не производится.


Повторная попытка осуществляется передачей нового значения ''An'' и ''Aksv''.
Повторная попытка осуществляется передачей нового значения ''An'' и ''Aksv''.
Строка 128: Строка 128:
|HDMI_MODE
|HDMI_MODE
|align="center" |12
|align="center" |12
|Режим HDMI. Когда бит установлен на единицу, HDCP-приемник переходит из режима DVI в режим HDMI. Бит сбрасывается при включении устройства, его перезагрузке, подключении или отключении HDCP-передатчика или в том случае, когда HDCP-приемник не получает данные в течение 30 кадров.
|Режим HDMI. Когда бит установлен на единицу, HDCP-приёмник переходит из режима DVI в режим HDMI. Бит сбрасывается при включении устройства, его перезагрузке, подключении или отключении HDCP-передатчика или в том случае, когда HDCP-приёмник не получает данные в течение 30 кадров.
|-
|-
|MAX_CASCADE_EXCEEDED
|MAX_CASCADE_EXCEEDED
Строка 150: Строка 150:
[[Файл:authentication part3.svg]]
[[Файл:authentication part3.svg]]


Третья часть протокола работает в течение [[VBI|вертикального интервала]] ({{lang-en|vertical blanking interval}}) предшествующего кадру. Каждый из двух HDCP устройств вычисляет новые инициирующие числа ''Ki'', ''Mi'' и ''Ri'', где индекс ''i'' отображает номер кадра, начиная с единицы для первого кадра с шифрованием (после завершения первой части протокола аутентификации). Индекс увеличивается на единицу с каждым кадром или с каждым зашифрованным кадром в зависимости от того, включен ли режим '''ADVANCE_CIPHER'''. Счетчик кадров не увеличивается, если HDCP устройство находится в состоянии HDMI '''AVMUTE''' (режим, когда выключается звук, если происходят изменения, которые могут привести к шуму в аудиоканале<ref>{{cite news |title=HDMI Specification 1.3a |publisher=HDMI Licensing, LLC. |url=http://www.hdmi.org/download/HDMISpecification13a.pdf |format=PDF |date=2006-11-10}}, ''Секция: 5.3.6 General Control Packet''</ref>), и не увеличивается после выхода из этого состояния до первого шифрованного кадра.
Третья часть протокола работает в течение [[VBI|вертикального интервала]] ({{lang-en|vertical blanking interval}}) предшествующего кадру. Каждый из двух HDCP устройств вычисляет новые инициирующие числа ''Ki'', ''Mi'' и ''Ri'', где индекс ''i'' отображает номер кадра, начиная с единицы для первого кадра с шифрованием (после завершения первой части протокола аутентификации). Индекс увеличивается на единицу с каждым кадром или с каждым зашифрованным кадром в зависимости от того, включен ли режим '''ADVANCE_CIPHER'''. Счётчик кадров не увеличивается, если HDCP устройство находится в состоянии HDMI '''AVMUTE''' (режим, когда выключается звук, если происходят изменения, которые могут привести к шуму в аудиоканале<ref>{{cite news |title=HDMI Specification 1.3a |publisher=HDMI Licensing, LLC. |url=http://www.hdmi.org/download/HDMISpecification13a.pdf |format=PDF |date=2006-11-10}}, ''Секция: 5.3.6 General Control Packet''</ref>), и не увеличивается после выхода из этого состояния до первого шифрованного кадра.
* ''Ki'' — 56-битный ключ, используемый для инициализации HDCP шифра, чтобы зашифровать или расшифровать HDCP [[HDTV|контент]].
* ''Ki'' — 56-битный ключ, используемый для инициализации HDCP шифра, чтобы зашифровать или расшифровать HDCP [[HDTV|контент]].
* ''Mi'' — новая 64-битная инициирующая величина для HDCP шифра.
* ''Mi'' — новая 64-битная инициирующая величина для HDCP шифра.
* ''Ri'' — 16-битное число, предназначенное для подтверждения целостности соединения (увеличивается каждые 128 кадров, начиная со 128)
* ''Ri'' — 16-битное число, предназначенное для подтверждения целостности соединения (увеличивается каждые 128 кадров, начиная со 128)


HDCP-передатчик проверяет ''Ri’'' по собственным вычислениям, для того чтобы подтвердить способность видеоприеника корректно расшифровывать информацию. Эта проверка делается как минимум каждые две секунды, также возможно синхронное чтение ''Ri'' во время очередного её изменения (каждые 128 кадров). При этом чтение ''Ri''' должно завершиться в течение одной миллисекунды с того момента как HDCP-передатчик инициирует это действие, если по каким-либо причинам операция не удалась, то HDCP-передатчик считает, что HDCP-приемник не прошел аутентификацию.
HDCP-передатчик проверяет ''Ri’'' по собственным вычислениям, для того чтобы подтвердить способность видеоприеника корректно расшифровывать информацию. Эта проверка делается как минимум каждые две секунды, также возможно синхронное чтение ''Ri'' во время очередного её изменения (каждые 128 кадров). При этом чтение ''Ri''' должно завершиться в течение одной миллисекунды с того момента как HDCP-передатчик инициирует это действие, если по каким-либо причинам операция не удалась, то HDCP-передатчик считает, что HDCP-приёмник не прошёл аутентификацию.


С целью увеличения вероятности обнаружения рассинхронизации в шифровании HDCP-передатчик и приемник дополнительно могут поддерживать Enhanced Link Verification (усиленный контроль за соединением), в котором вычисления для поддержки контроля над синхронизацией шифра выполняются, если передается особый пиксель.
С целью увеличения вероятности обнаружения рассинхронизации в шифровании HDCP-передатчик и приёмник дополнительно могут поддерживать Enhanced Link Verification (усиленный контроль за соединением), в котором вычисления для поддержки контроля над синхронизацией шифра выполняются, если передается особый пиксель.
Режим '''ADVANCE_CIPHER''' — это дополнительный режим, в котором состояние шифра и счетчик кадров увеличиваются каждый кадр в режиме [[Digital Visual Interface|DVI]] или каждый кадр в режиме [[High-Definition Multimedia Interface|HDMI]] (если только он не находится в состоянии '''AVMUTE''') вне зависимости от того включено шифрование или нет.
Режим '''ADVANCE_CIPHER''' — это дополнительный режим, в котором состояние шифра и счётчик кадров увеличиваются каждый кадр в режиме [[Digital Visual Interface|DVI]] или каждый кадр в режиме [[High-Definition Multimedia Interface|HDMI]] (если только он не находится в состоянии '''AVMUTE''') вне зависимости от того включено шифрование или нет.


== Шифрование данных ==
== Шифрование данных ==
Строка 194: Строка 194:
[[Файл:HDCP Cipher structure.svg|thumb|left|Структура HDCP шифра]]
[[Файл:HDCP Cipher structure.svg|thumb|left|Структура HDCP шифра]]


Общую структуру HDCP шифра можно разделить на три слоя. Первый слой состоит из четырёх [[Линейный регистр сдвига с обратной связью|линейных регистров сдвига с обратной связью]] ({{lang-en|linear feedback shift register, LSFR}}), на выходе которых получается один бит. Если подан сигнал повторного ввода ключа, то этот бит помещается в средний слой. Средний слой состоит из двух схожих частей. Первая часть — ''функция B раунда'' — выполняет один раунд блочного шифрования, использую три 28-битных регистра ''Bx, By, Bz''. Вторая часть — ''функция K раунда'' — схожа по структуре с ''функцией B'', но работает выходом защелки ''Ky'' (поток 28-битных раундовых ключей к раундовой ''функции B'' со скоростью один 28-битный ключ в один такт). В нижнем слое каждый такт происходит компрессия четырёх выходов 28-битных регистров ''By, Bz, Ky, Kz'' в 24-битный блок [[Псевдослучайная последовательность|псевдослучайной последовательности]].
Общую структуру HDCP шифра можно разделить на три слоя. Первый слой состоит из четырёх [[Линейный регистр сдвига с обратной связью|линейных регистров сдвига с обратной связью]] ({{lang-en|linear feedback shift register, LSFR}}), на выходе которых получается один бит. Если подан сигнал повторного ввода ключа, то этот бит помещается в средний слой. Средний слой состоит из двух схожих частей. Первая часть — ''функция B раунда'' — выполняет один раунд блочного шифрования, использую три 28-битных регистра ''Bx, By, Bz''. Вторая часть — ''функция K раунда'' — схожа по структуре с ''функцией B'', но работает выходом защёлки ''Ky'' (поток 28-битных раундовых ключей к раундовой ''функции B'' со скоростью один 28-битный ключ в один такт). В нижнем слое каждый такт происходит компрессия четырёх выходов 28-битных регистров ''By, Bz, Ky, Kz'' в 24-битный блок [[Псевдослучайная последовательность|псевдослучайной последовательности]].


=== Модуль линейных регистров сдвига с обратной связью ===
=== Модуль линейных регистров сдвига с обратной связью ===


Модуль линейных регистров сдвига состоит из четырёх [[Линейный регистр сдвига с обратной связью|LFSR]] различной длины и разных смесителей ({{lang-en|combining function}}). Функция смешения зависит от трех отводов ({{lang-en|tap}}) каждого регистра.
Модуль линейных регистров сдвига состоит из четырёх [[Линейный регистр сдвига с обратной связью|LFSR]] различной длины и разных смесителей ({{lang-en|combining function}}). Функция смешения зависит от трёх отводов ({{lang-en|tap}}) каждого регистра.
[[Файл:Lsfr0.svg|thumb|right|Пример одного из используемых регистров сдвига (LSFR0)]]
[[Файл:Lsfr0.svg|thumb|right|Пример одного из используемых регистров сдвига (LSFR0)]]


Строка 293: Строка 293:
=== Модуль блоков ===
=== Модуль блоков ===
[[Файл:Block module.png|thumb|left|Устройство раундовых функций]]
[[Файл:Block module.png|thumb|left|Устройство раундовых функций]]
Этот модуль состоит из двух отдельных компонент, называемых [[Сеть Фейстеля|раундовыми функциями]]. Одна из компонент ''раундовая функция K'' снабжает другую компоненту — ''раундовую функцию B'' — потоком ключей. Каждая компонента работает с соответствующим набором трех 28-битных регистров.
Этот модуль состоит из двух отдельных компонент, называемых [[Сеть Фейстеля|раундовыми функциями]]. Одна из компонент ''раундовая функция K'' снабжает другую компоненту — ''раундовую функцию B'' — потоком ключей. Каждая компонента работает с соответствующим набором трёх 28-битных регистров.


Если поступил сигнал на переопределение ключа, то в тринадцатый бит регистра ''Ky'' записывается бит из выходного потока модуля LSFR.
Если поступил сигнал на переопределение ключа, то в тринадцатый бит регистра ''Ky'' записывается бит из выходного потока модуля LSFR.


S-блоки для обеих раундовых функций состоят из семи S-блоков с четырьмя входами и четырьмя выходами. Для ''раундовой функции K'' S-блоки названы ''SK0, SK1, .. ,SK6''. Для раундовой функции B S-блоки названы ''SB0, SB1, .. , SB6''. В '''I-й''' вход блока '''J''' записывается бит под номером '''I*7+J''' регистров ''Bx'' или ''Kx'', а на выход '''I''' блока '''J''' подается бит '''I*7+J''' регистров ''Bz, Kz''. При этом бит ноль считается младшим разрядом.
S-блоки для обеих раундовых функций состоят из семи S-блоков с четырьмя входами и четырьмя выходами. Для ''раундовой функции K'' S-блоки названы ''SK0, SK1.. ,SK6''. Для раундовой функции B S-блоки названы ''SB0, SB1.., SB6''. В '''I-й''' вход блока '''J''' записывается бит под номером '''I*7+J''' регистров ''Bx'' или ''Kx'', а на выход '''I''' блока '''J''' подается бит '''I*7+J''' регистров ''Bz, Kz''. При этом бит ноль считается младшим разрядом.
[[Файл:Diffusion network logic function.png|thumb|left|Таблица для логической функции диффузионной сети]]
[[Файл:Diffusion network logic function.png|thumb|left|Таблица для логической функции диффузионной сети]]
Диффузионные сети для ''раундовой функции К'' показаны в таблице. Следует заметить, что ни в одной диффузионной сети для этой функции нет дополнительных входов. В половине диффузионных компонент ''функции B'' присутствуют дополнительные входы, в которые поступают биты из регистра ''Ky раундовой функции K''.
Диффузионные сети для ''раундовой функции К'' показаны в таблице. Следует заметить, что ни в одной диффузионной сети для этой функции нет дополнительных входов. В половине диффузионных компонент ''функции B'' присутствуют дополнительные входы, в которые поступают биты из регистра ''Ky раундовой функции K''.
Строка 351: Строка 351:
|-
|-
|align="center" |8
|align="center" |8
|Совершение 56 тактов работы LFSR и модуля блоков, сохранение 64-битного значения ''Mi'' во время последних четырех тактов
|Совершение 56 тактов работы LFSR и модуля блоков, сохранение 64-битного значения ''Mi'' во время последних четырёх тактов
|-
|-
|align="center" |9
|align="center" |9
Строка 361: Строка 361:
! style="background:#ffdead;" | Этап
! style="background:#ffdead;" | Этап
! style="background:#ffdead;" | Такты
! style="background:#ffdead;" | Такты
! style="background:#ffdead;" | Начальное значение LFSR <br />(56 бит)</br>
! style="background:#ffdead;" | Начальное значение LFSR <br />(56 бит)<br />
! style="background:#ffdead;" width="15%" | Начальное значение K
! style="background:#ffdead;" width="15%" | Начальное значение K
! style="background:#ffdead;" width="20%"| Начальное значение B <br />(65 бит)</br>
! style="background:#ffdead;" width="20%"| Начальное значение B <br />(65 бит)<br />
! style="background:#ffdead;" width="10%" | Выход B <br />(84 бита)</br>
! style="background:#ffdead;" width="10%" | Выход B <br />(84 бита)<br />
! style="background:#ffdead;" | Выход функции
! style="background:#ffdead;" | Выход функции
|-
|-
| rowspan="2" |'''hdcpBlockCipher''' <br />во время</br> аутентификации || 1-3 || 48 || — || ''Km'' (56 бит) || '''REPEATER'''<nowiki>||</nowiki>''An'' || ''Ks'' ||—
| rowspan="2" |'''hdcpBlockCipher''' <br />во время<br /> аутентификации || 1-3 || 48 || — || ''Km'' (56 бит) || '''REPEATER'''<nowiki>||</nowiki>''An'' || ''Ks'' ||—
|-
|-
|6-9 || 56 || ''Ks'' || ''Ks'' (84 бит)|| '''REPEATER''' <nowiki>||</nowiki>''An''|| — || <math>R0, M0</math>
|6-9 || 56 || ''Ks'' || ''Ks'' (84 бит)|| '''REPEATER''' <nowiki>||</nowiki>''An''|| — || <math>R0, M0</math>
|-
|-
|rowspan="2" |'''hdcpBlockCipher''' <br />во время</br> вертикального интервала ||1-3|| 48|| — ||''Ks'' (56 бит)|| '''REPEATER''' <nowiki>||</nowiki><math>M_{i-1}</math>||<math> K_i</math>|| —
|rowspan="2" |'''hdcpBlockCipher''' <br />во время<br /> вертикального интервала ||1-3|| 48|| — ||''Ks'' (56 бит)|| '''REPEATER''' <nowiki>||</nowiki><math>M_{i-1}</math>||<math> K_i</math>|| —
|-
|-
|6-9|| 56|| <math>Ki</math>||<math> Ki</math> (84 бит)|| '''REPEATER''' <nowiki>||</nowiki><math>M_{i-1}</math>|| — ||<math> R_i, M_i </math>
|6-9|| 56|| <math>Ki</math>||<math> Ki</math> (84 бит)|| '''REPEATER''' <nowiki>||</nowiki><math>M_{i-1}</math>|| — ||<math> R_i, M_i </math>
Строка 385: Строка 385:
Пример:
Пример:
65-битный результат конкатенации бита '''REPEATER''' и величины ''An'' будет записан в регистры ''Bx'' и ''By'',
65-битный результат конкатенации бита '''REPEATER''' и величины ''An'' будет записан в регистры ''Bx'' и ''By'',
плюс в 9 младших бит регистра ''Bz'', при этом старшие 19 бит регистра заполнятся нулями.
плюс в 9 младших бит регистра ''Bz'', при этом старшие 19 бит регистра заполнятся нулями.
Откуда берутся биты Mi и Ri, показано в таблице выше.
Откуда берутся биты Mi и Ri, показано в таблице выше.


=== hdcpRngCipher ===
=== hdcpRngCipher ===
Эта функция используется как [[Генератор псевдослучайных чисел|генератор случайных чисел]], причем функция должна поддерживать метод, который позволял бы получать биты из внешнего источника. Должно происходить смешивание битов извне со значениями регистров (без замены). То есть не должно существовать способа определить генерируемую величину.
Эта функция используется как [[Генератор псевдослучайных чисел|генератор случайных чисел]], причём функция должна поддерживать метод, который позволял бы получать биты из внешнего источника. Должно происходить смешивание битов извне со значениями регистров (без замены). То есть не должно существовать способа определить генерируемую величину.


Внешний источник должен обладать разумной вероятностью, или [[Информационная энтропия|энтропией]]. То есть, если, например, дан 1000000 различных циклов, то количество повторяющихся чисел среди 1000000 ''An'' не должно превышать 50 %. Это соответствует примерно сорока (если считать, что <math> 1000000 \approx 2^{20}</math>) произвольным битам из 64.
Внешний источник должен обладать разумной вероятностью, или [[Информационная энтропия|энтропией]]. То есть, если, например, дан 1000000 различных циклов, то количество повторяющихся чисел среди 1000000 ''An'' не должно превышать 50 %. Это соответствует примерно сорока (если считать, что <math> 1000000 \approx 2^{20}</math>) произвольным битам из 64.
Строка 395: Строка 395:
== Криптоанализ ==
== Криптоанализ ==


Для того чтобы получить общий секрет, устройства складывают свои секретные ключи ''Ai'' в зависимости от полученного вектора ключа. В итоге получается 56-битный секрет ''Km'' (передатчик) и ''Km’'' (приемник), причем они должны быть равны.
Для того чтобы получить общий секрет, устройства складывают свои секретные ключи ''Ai'' в зависимости от полученного вектора ключа. В итоге получается 56-битный секрет ''Km'' (передатчик) и ''Km’'' (приёмник), причём они должны быть равны.


Затем, после аутентификации приемник шифрует оказию полученным ключом и отправляет её передатчику. Тот в свою очередь проверяет своим ключом ''Km'', что оказия зашифрована верно.
Затем, после аутентификации приёмник шифрует оказию полученным ключом и отправляет её передатчику. Тот в свою очередь проверяет своим ключом ''Km'', что оказия зашифрована верно.


Следовательно, если мы определим 40 линейно независимых векторов <math>A_1.. A_{40}</math> (секретные ключи устройства), то мы сможем полностью взломать систему, поскольку эти ключи будут составлять базис 40-мерного пространства секретных ключей, и мы сможем составить из них любой набор секретных ключей любого устройства.
Следовательно, если мы определим 40 линейно независимых векторов <math>A_1.. A_{40}</math> (секретные ключи устройства), то мы сможем полностью взломать систему, поскольку эти ключи будут составлять базис 40-мерного пространства секретных ключей, и мы сможем составить из них любой набор секретных ключей любого устройства.
Строка 444: Строка 444:
= [ a_1 * (A_1)keys + ... + a_n * (A_n)keys ] * Bksv. </math>
= [ a_1 * (A_1)keys + ... + a_n * (A_n)keys ] * Bksv. </math>


5. Так как выбор B был произвольным, то это сработает для любого B, причем
5. Так как выбор B был произвольным, то это сработает для любого B, причём


: <math>Xkeys = a_1 * (A_1)keys + ... + a_n * (A_n)keys. </math>
: <math>Xkeys = a_1 * (A_1)keys + ... + a_n * (A_n)keys. </math>

Версия от 08:42, 20 июля 2015

HDCP (англ. High-bandwidth Digital Content Protection — «защита широкополосного цифрового содержимого») — технология защиты медиаконтента, разработанная корпорацией Intel[1] и предназначенная для предотвращения незаконного копирования высококачественного видеосигнала, передаваемого через интерфейсы DVI (для этого интерфейса HDCP является необязательной опцией[2]), DisplayPort (для этого интерфейса HDCP является необязательной опцией), HDMI, GVIF или UDI. Защищённый видеосигнал может быть воспроизведён только на оборудовании, поддерживающем HDCP.

Система шифрования была окончательно взломана в 2010 году[3].

Технология

HDCP создана для защиты передачи медиаконтента между HDCP-передатчиком и HDCP-приёмником. Технология также предусматривает использование HDCP-повторителей с защищёнными портами для нисходящего потока данных (от поставщика к заказчику услуги). В системе возможно до семи уровней HDCP-повторителей и до 128 HDCP-совместимых устройств.

Система защиты состоит из трёх основных компонентов:

  • Протокол аутентификации
  • Шифрование передаваемых данных
  • Защита от подслушивания «третьим лицом»

Нахождение секретной матрицы DCP LLC

14 сентября 2010 несколько онлайн СМИ (ZDNet, Engadget) сообщили о факте открытой публикации мастер ключа HDCP, с помощью которого можно создавать закрытые ключи устройств HDCP (device private keys) без помощи со стороны оператора ключевой инфраструктуры HDCP (The Digital Content Protection LLC). C публикацией мастер ключа были нейтрализованы все меры по отзыву ключей устройств, так как вместо старого (отозванного) ключа устройства всегда можно сгенерировать новый[4][5]. Не вполне ясно, каким образом был получен мастер ключ, известно, что публикация ключа вместе с инструкцией по использованию произошла через Twitter и pastebin. Engadget считает, что атакующий мог использовать метод Crosby (2001).

Через 2 дня, 16 сентября, компания Intel (создатель HDCP) подтвердила, что данный мастер ключ реален и что защита HDCP фактически взломана[6].[7][3]. Intel угрожает, что предпримет юридические действия против любого, кто изготавливает аппаратные устройства для обхода защиты HDCP[8].

Протокол аутентификации

Протокол аутентификации используется между HDCP-передатчиком и HDCP-приёмником для подтверждения того, что последний является устройством, которому разрешено получать соответствующий контент. Подтверждение — знание секретного набора ключей. Каждое HDCP-устройство снабжается уникальным набором из сорока 56-битных секретных ключей, называемых DPK (англ. device private keys, секретные ключи устройства), получаемых от организации DCP LLC. Во время обмена информацией устройства создают общий секрет, который нельзя подслушать во время этого обмена, и этот секрет далее применяется как симметричный ключ для расшифровки HDCP-контента, предназначенного устройству, прошедшему аутентификацию.

Каждое HDCP-устройство хранит, помимо Device Private Keys, соответствующий 40-битный идентификатор — KSV[англ.] (англ. key selection vector, вектор выбора ключа), который, так же как и DPK, получает от DCP LLC.

Протокол аутентификации можно разбить на три части:

  • Установление общего секрета
  • Сообщение HDCP-повторителя о векторах выбора ключа, присоединённых HDCP-получателях
  • Установление начального состояния шифра HDCP для кодирования содержимого кадра (третья часть происходит во время вертикального интервала, который предшествует каждому кадру, требующему шифрования)

Первая часть протокола аутентификации

На рисунке изображена первая часть работы протокола аутентификации. Первым шагом HDCP-передатчик (устройство А) посылает инициирующее сообщение HDCP-приёмнику (устройство B). Сообщение содержит KSV передатчика (Aksv) и 64-битное псевдослучайное число (An) (число генерируется функцией hdcpRngCipher).

Передатчик может начать процедуру проверки подлинности в любой момент, даже если предыдущая только что завершилась.

Вторым шагом HDCP-приёмник отвечает сообщением с KSV приёмника (Bksv) и битом REPEATER (повторитель), который указывает, является ли устройство B повторителем или нет. HDCP-передатчик проверяет, что Aksv содержит ровно 20 нулей и 20 единиц и не находится в чёрном списке.

На этом этапе в обоих устройствах вычисляется общий 56-битный секрет Km и Km’.

Вычисление производится следующим образом:

Из набора DPK суммируются ключи в соответствии с битовым представлением полученного KSV: если бит равен единице, то соответствующий ключ используется. Сложение ключей происходит по модулю без переполнения.

Пример:

Предположим, Bksv равно 0x5A3. В двоичном представлении — 10110100011.
Следовательно, Устройство А складывает свои секретные ключи, стоящие на позициях 0, 1, 5, 7, 8, 10 и рассчитывает общий секрет Km.

Устройство В проделывает аналогичные вычисления, используя собственный набор секретных ключей и вектор выбора, полученный от устройства A, чтобы посчитать Km’.

На третьем шаге применяется функция hdcpBlockCipher для вычисления Ks, M0, R0. Инициирующие величины для работы этой функции — Km (или Km’) и конкатенация бита REPEATER с An (бит REPEATER указывает на то, что HDCP-приёмник поддерживает дальнейшую передачу HDCP-контента, то есть является повторителем).

  • Ks — 56-битный сессионный ключ для работы HDCP шифра
  • M0 — 64-битная секретная величина, используемая во второй части протокола аутентификации, а также как вспомогательный инициирующий вектор HDCP шифра.
  • R0’ — 16-битный ответ, который видеоприёмник посылает HDCP-передатчику в подтверждение успеха обмена сообщениями аутентификации. HDCP-передатчик должен прочитать R0’ не позднее 100 миллисекунд после того как отправлено число Aksv видеоприёмнику, если прошло больше времени, то считывать R0’ нельзя.

Если аутентификация прошла успешно, то R0 = R0’, иначе в большинстве случаев неравны. Далее, при помощи Ri’, получаемых в течение работы третьей части протокола, можно будет обнаружить, что аутентификация прошла неудачно, в том случае, если величина R0 ошибочно указала успех аутентификации.

Вторая часть протокола аутентификации

Вторая часть протокола аутентификации требуется в том случае, если HDCP-приёмник является HDCP-повторителем. HDCP-передатчик выполняет вторую часть протокола только тогда, когда установлен бит REPEATER (повторитель), это значит, что HDCP-приёмник — HDCP-повторитель. Эта часть протокола составляет список всех KSV устройств, подключенных к HDCP-повторителю ниже по уровню: HDCP-защищённые порты HDCP-повторителей, HDCP-приёмники. Этот список представлен в виде непрерывного набора байтов, в котором каждый KSV занимает 5 байт, записанных в прямом порядке.

Общая длина KSV списка = 5 байт * число присоединенных активных HDCP устройств

HDCP-защищённые порты с неактивными HDCP устройства ничего не добавляют в набор KSV, также как и сам HDCP-повторитель, инициирующий создание списка, не добавляет свой KSV в него.

Для того чтобы добавить KSV список, полученный от предыдущего HDCP-повторителя, требуется проверка целостности. HDCP-повторитель, запросивший список, вычисляет V и сравнивает его с полученным V’.

V = SHA-1 (список KSV || состояние B || M0)

Где:

  • список KSV — битовое представление KSV
  • состояние B — битовое представление состояния устройства B (см. таблицу)
  • M0 — некоторая секретная величина

Всё битовое представление располагается в прямом порядке.

Если V≠ V’, то проверка на целостность считается неудачной и HDCP-повторитель не должен принимать список. При этом истечет таймер watchdog (сторожевой таймер) и HDCP-передатчик сумеет обнаружить эту ошибку.

Кроме составления списка KSV производится распространение топологической информации (количество и глубина) вверх по дереву устройств до HDCP-передатчика. Количество устройств (англ. device count) рассчитывается как количество всех HDCP-повторителей и приёмников вниз от устройства, которое считает сумму. Глубина (англ. depth) для HDCP-повторителя равна максимальному значения глубины, полученному от нижестоящих в дереве устройств HDCP-повторителю, плюс один. Например, для HDCP-повторителя с четырьмя нижестоящими HDCP-получателями, глубина равна единице, а число устройств — четырём.

Число устройств в одном дереве не может превышать 127, а число уровней (глубина) — семи.

Пример:

HDCP-передатчик, определив, что передан бит REPEATER, устанавливает 5-секундный сторожевой таймер (watchdog) и запрашивает статус READY (готовность) у HDCP-повторителя. Если бит состояния установлен на 1 (готов), то HDCP-передатчик считывает список KSV и проверяет, не превышает ли список устройств установленный спецификацией объём и глубину, затем проверяет список на целостность, вычисляя V. Если какое-либо из условий не выполнено или истекает время таймера, то аутентификация не производится.

Повторная попытка осуществляется передачей нового значения An и Aksv.

Битовое представление состояния устройства B
Название поля Занимаемые биты Описание поля
Rsvd 15:14 Зарезервирован. Значение — 0.
HDMI_RESERVED_2 13 Зарезервирован.
HDMI_MODE 12 Режим HDMI. Когда бит установлен на единицу, HDCP-приёмник переходит из режима DVI в режим HDMI. Бит сбрасывается при включении устройства, его перезагрузке, подключении или отключении HDCP-передатчика или в том случае, когда HDCP-приёмник не получает данные в течение 30 кадров.
MAX_CASCADE_EXCEEDED 11 Отображает ошибки в топологии. Если установлен на единицу, то в дереве устройств находится более семи уровней повторителей.
DEPTH 10:8 Показывает число уровней в системе
MAX_DEVS_EXCEEDED 7 Отображает ошибки в топологии. Если установлен на единицу, то в дереве системы находится более 127 устройств.
DEVICE_COUNT 6:0 Полное число присоединенных устройств. Всегда равен нулю для HDCP-повторителей. Это число не включает сами HDCP-повторители, но устройства к ним присоединенные.

Третья часть протокола аутентификации

Третья часть протокола работает в течение вертикального интервала (англ. vertical blanking interval) предшествующего кадру. Каждый из двух HDCP устройств вычисляет новые инициирующие числа Ki, Mi и Ri, где индекс i отображает номер кадра, начиная с единицы для первого кадра с шифрованием (после завершения первой части протокола аутентификации). Индекс увеличивается на единицу с каждым кадром или с каждым зашифрованным кадром в зависимости от того, включен ли режим ADVANCE_CIPHER. Счётчик кадров не увеличивается, если HDCP устройство находится в состоянии HDMI AVMUTE (режим, когда выключается звук, если происходят изменения, которые могут привести к шуму в аудиоканале[9]), и не увеличивается после выхода из этого состояния до первого шифрованного кадра.

  • Ki — 56-битный ключ, используемый для инициализации HDCP шифра, чтобы зашифровать или расшифровать HDCP контент.
  • Mi — новая 64-битная инициирующая величина для HDCP шифра.
  • Ri — 16-битное число, предназначенное для подтверждения целостности соединения (увеличивается каждые 128 кадров, начиная со 128)

HDCP-передатчик проверяет Ri’ по собственным вычислениям, для того чтобы подтвердить способность видеоприеника корректно расшифровывать информацию. Эта проверка делается как минимум каждые две секунды, также возможно синхронное чтение Ri во время очередного её изменения (каждые 128 кадров). При этом чтение Ri' должно завершиться в течение одной миллисекунды с того момента как HDCP-передатчик инициирует это действие, если по каким-либо причинам операция не удалась, то HDCP-передатчик считает, что HDCP-приёмник не прошёл аутентификацию.

С целью увеличения вероятности обнаружения рассинхронизации в шифровании HDCP-передатчик и приёмник дополнительно могут поддерживать Enhanced Link Verification (усиленный контроль за соединением), в котором вычисления для поддержки контроля над синхронизацией шифра выполняются, если передается особый пиксель.

Режим ADVANCE_CIPHER — это дополнительный режим, в котором состояние шифра и счётчик кадров увеличиваются каждый кадр в режиме DVI или каждый кадр в режиме HDMI (если только он не находится в состоянии AVMUTE) вне зависимости от того включено шифрование или нет.

Шифрование данных

HDCP шифрование происходит на входе TMDS (англ. Transition Minimized Differential Signaling, дифференциальная передача сигналов с минимизацией перепадов уровней) шифратора, а расшифрование на выходе TMDS дешифратора. Процедура шифрования состоит из побитового сложения (XOR) потока данных с псевдослучайной последовательностью, генерируемой HDCP шифром.


Блок-схема шифрования-расшифрования

Во время вертикального интервала функция hdcpBlockCipher подготавливает HDCP шифр к генерации для каждого пикселя входного потока 24-битной псевдослучайной последовательности, зависящей от ключа. Эти биты накладываются на TMDS каналы как показано в таблице на примере RGB видеопотока.

Отображение шифрованного потока
Выход шифра Канал TMDS Биты видеопотока
23:16 2 Red [7:0]
15:8 1 Green [7:0]
7:0 0 Blue [7:0]

Во время строчного интервала гашения (англ. horizontal-blanking interval) HDCP шифр переназначает ключ каждые 56 бит, что усложняет задачу построчного взлома шифра.

HDCP Шифр

Структура HDCP шифра

Общую структуру HDCP шифра можно разделить на три слоя. Первый слой состоит из четырёх линейных регистров сдвига с обратной связью (англ. linear feedback shift register, LSFR), на выходе которых получается один бит. Если подан сигнал повторного ввода ключа, то этот бит помещается в средний слой. Средний слой состоит из двух схожих частей. Первая часть — функция B раунда — выполняет один раунд блочного шифрования, использую три 28-битных регистра Bx, By, Bz. Вторая часть — функция K раунда — схожа по структуре с функцией B, но работает выходом защёлки Ky (поток 28-битных раундовых ключей к раундовой функции B со скоростью один 28-битный ключ в один такт). В нижнем слое каждый такт происходит компрессия четырёх выходов 28-битных регистров By, Bz, Ky, Kz в 24-битный блок псевдослучайной последовательности.

Модуль линейных регистров сдвига с обратной связью

Модуль линейных регистров сдвига состоит из четырёх LFSR различной длины и разных смесителей (англ. combining function). Функция смешения зависит от трёх отводов (англ. tap) каждого регистра.

Пример одного из используемых регистров сдвига (LSFR0)
Полиномы регистров и используемые выводы
Номер регистра Полином регистра Выходы, используемые для функции смешения
0 1 2
3 5 11 16
2 5 9 15
1 4 8 13
0 3 7 12

Функция смешения состоит из четырёх каскадно-соединенных сетей с перемещением каналов (англ. shuffle network), каждая из которых включает в себя два бита состояния. Над одними отводами каждого из четырёх регистров производится операция XOR, для того чтобы сформировать входные данные для первого каскада сети. Другие отводы регистров используются для выбора входа в одну из сетей. Выход четвёртой сети складывается (XOR) с одним отводом от каждого регистра.

Устройство функции смешения)

Сеть с перемещением каналов

На рисунке схематически изображена сеть с перемещением каналов. В том случае, если в сети содержится пара булевских значений (A, B), на вход поступает булевская величина D, а вход выбора S, то значение параметра S определяет следующее состояние. Если S — ноль, то на выход поступает A и устанавливается состояние (B, D). Если S — единица, то на выходе B и устанавливается состояние (A, D).

Устройство сети с перемещением каналов

Во всех режимах работы LSFR и функция смешения инициализируются 56-битным числом. 60 битов LSFR состояния используют эти 56 битов непосредственно, плюс дополнение некоторых четырёх бит. Shuffle-сети инициализируются той же величиной.

Однобитовый выходной поток функции смешения — это единственные данные, получаемые из работы модуля LSFR. Этот поток снабжает модуль блоков материалом для создания ключей, если поступил сигнал на переопределение ключа.

Инициализация регистров сдвига
Бит Начальное значение
LFSR3 [16] Дополнение ко входному биту [47]
[15:0] Входные биты [55:40]
LFSR2 [15] Дополнение ко входному биту [32]
[14:0] Входные биты [39:25]
LFSR1 [13] Дополнение ко входному биту [18]
[12:0] Входные биты [24:12]
LFSR0 [12] Дополнение ко входному биту [6]
[11:0] Входные биты [11:0]
Shuffle networks Регистр A 0
Регистр В 1

Модуль блоков

Устройство раундовых функций

Этот модуль состоит из двух отдельных компонент, называемых раундовыми функциями. Одна из компонент раундовая функция K снабжает другую компоненту — раундовую функцию B — потоком ключей. Каждая компонента работает с соответствующим набором трёх 28-битных регистров.

Если поступил сигнал на переопределение ключа, то в тринадцатый бит регистра Ky записывается бит из выходного потока модуля LSFR.

S-блоки для обеих раундовых функций состоят из семи S-блоков с четырьмя входами и четырьмя выходами. Для раундовой функции K S-блоки названы SK0, SK1.. ,SK6. Для раундовой функции B S-блоки названы SB0, SB1.., SB6. В I-й вход блока J записывается бит под номером I*7+J регистров Bx или Kx, а на выход I блока J подается бит I*7+J регистров Bz, Kz. При этом бит ноль считается младшим разрядом.

Таблица для логической функции диффузионной сети

Диффузионные сети для раундовой функции К показаны в таблице. Следует заметить, что ни в одной диффузионной сети для этой функции нет дополнительных входов. В половине диффузионных компонент функции B присутствуют дополнительные входы, в которые поступают биты из регистра Ky раундовой функции K.

Диффузия раундовой функции K
Диффузия раундовой функции B (прочерк означает, что у данной компоненты нет дополнительного входа)

Логическая функция выхода

Регистры Ky, Kz, By, Bz образуют логическую функцию выхода. Каждый из 24 битов получается путем сложения (XOR) девяти членов, как показывает формула ниже:


Где  — XOR, a  — логическое умножение

Отображение входов и выходов логической функции выхода

Пример: Выходной бит 0 вычисляется следующим образом:

Некоторые используемые функции

hdcpBlockCipher

Эта последовательность используется во время первой части протокола аутентификации, чтобы выработать сессионный ключ Ks и во время вертикального интервала, предшествующего шифрованному кадру, чтобы получить ключ кадра Ki.

Последовательность работы функции hdcpBlockCipher Начальные состояния и выход функции hdcpBlockCipher\
Этап Действие
1 Загрузка регистров B и K модуля блоков
2 Совершение 48 тактов работы регистров
3 Сохранение 56 младших битов для будущего использования в качестве Ks, Ki
4 Перенос 84 битов регистров B в регистры K
5 Перезагрузка регистра B
6 Инициализация модуля LFSR
7 Запрос на смену ключа
8 Совершение 56 тактов работы LFSR и модуля блоков, сохранение 64-битного значения Mi во время последних четырёх тактов
9 Снятие запроса на смену ключа
Этап Такты Начальное значение LFSR
(56 бит)
Начальное значение K Начальное значение B
(65 бит)
Выход B
(84 бита)
Выход функции
hdcpBlockCipher
во время
аутентификации
1-3 48 Km (56 бит) REPEATER||An Ks
6-9 56 Ks Ks (84 бит) REPEATER ||An
hdcpBlockCipher
во время
вертикального интервала
1-3 48 Ks (56 бит) REPEATER ||
6-9 56 (84 бит) REPEATER ||

Для 8-битных чисел a и b результатом конкатенации ab является 16-битное число, где a — старший разряд, а b — младший разряд.

В обеих раундовых функциях B и K регистры x, y, z можно рассматривать как один регистр длиной в 84 бита.

В том случае, когда требуется менее 84 битов регистра, используются биты младшего разряда. Если для инициализации доступно менее 84 бит, то заполняются младшие биты, а оставшиеся устанавливаются в ноль.

Пример:
65-битный результат конкатенации бита REPEATER и величины An будет записан в регистры Bx и By, 
плюс в 9 младших бит регистра Bz,  при этом старшие 19 бит регистра заполнятся нулями.
Откуда берутся биты Mi и Ri, показано в таблице выше.

hdcpRngCipher

Эта функция используется как генератор случайных чисел, причём функция должна поддерживать метод, который позволял бы получать биты из внешнего источника. Должно происходить смешивание битов извне со значениями регистров (без замены). То есть не должно существовать способа определить генерируемую величину.

Внешний источник должен обладать разумной вероятностью, или энтропией. То есть, если, например, дан 1000000 различных циклов, то количество повторяющихся чисел среди 1000000 An не должно превышать 50 %. Это соответствует примерно сорока (если считать, что ) произвольным битам из 64.

Криптоанализ

Для того чтобы получить общий секрет, устройства складывают свои секретные ключи Ai в зависимости от полученного вектора ключа. В итоге получается 56-битный секрет Km (передатчик) и Km’ (приёмник), причём они должны быть равны.

Затем, после аутентификации приёмник шифрует оказию полученным ключом и отправляет её передатчику. Тот в свою очередь проверяет своим ключом Km, что оказия зашифрована верно.

Следовательно, если мы определим 40 линейно независимых векторов (секретные ключи устройства), то мы сможем полностью взломать систему, поскольку эти ключи будут составлять базис 40-мерного пространства секретных ключей, и мы сможем составить из них любой набор секретных ключей любого устройства. С другой стороны, если не все 40 ключей будут линейно независимыми, то мы все равно сможем создать определенные наборы секретных ключей, входящих в найденное подпространство.

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

 

решив которую, мы получим секретные ключи атакуемого устройства. Предположение, которое мы делаем — то, что все 40 векторов выбора ключа ksv линейно независимы.

Если же пространство, охватываемое не является 40-мерным, то всё равно должна остаться лазейка. Или эти векторы выбора ключа сконструированы так, что будет невозможно составить из них базис сорокамерного пространства, или нам потребуется более 40 KSV, чтобы охватить всё пространство (каждое дополнительное устройство обладает малыми шансами быть линейно зависимым к уже полученному набору, примерно , где n — размерность охваченного пространства)

Мы также можем сами создать правильные наборы вектора выбора ключа и секретных ключей устройства из линейной комбинации уже нам известных.

Пример:

1. Выберем произвольное устройство B, если B может аутентифицировать Ai, то выполняется равенство:

2. Пусть

3. Мы знаем, что когда устройство B аутентифицирует устройство X, используется величина Km:

4. То есть, вспоминая тот факт, что (Ki)'m = Ki для всех i, мы можем вычислить Km':

5. Так как выбор B был произвольным, то это сработает для любого B, причём

Аутентификация между B и X пройдет успешно. Единственной сложностью может быть конструирование Xksv таким образом, чтобы он состоял из 20 нулей и 20 единиц.

Применение HDCP

Используется в HD DVD и Blu-ray плеерах. Если устройство воспроизведения и, в случае использования компьютера, ПО не поддерживают HDCP, то сигнал не будет транслироваться на выход, либо будет, но c деградированым качеством (англ. Image Constraint Token flag).

Одобрена 4 августа 2004 г. Федеральным агентством по связи США (англ. Federal Communications Commission, FCC) как "Технология защиты цифровых выходов (англ. Digital Output Protection Technology).

Технология поддерживается ОС Windows Vista.

Поддержка HDCP является обязательным условием соответствия марке «HD ready», также его применение насаждается законами США для всех приёмников вещания высокой чёткости.

См. также

Примечания

  1. Digital Content Protection - About DCP
  2. HDCP v1.4 specification (pdf). Digital Content Protection (8 июля 2009). Архивировано 25 февраля 2012 года., Страница 31 0x15, Страница 35
  3. 1 2 Берд Киви. Конец эпохи. Криптосистема HDCP взломана полностью и окончательно. Компьютерра онлайн (20 сентября 2010).
  4. Adrian Kingsley-Hughes. High-bandwidth Digital Content Protection (HDCP) could be fatally busted. ZDNet (14 сентября 2010). Архивировано 16 июня 2013 года.
  5. Lawler, Richard HDCP 'master key' supposedly released, unlocks HDTV copy protection permanently. Engadget. Дата обращения: 14 сентября 2010.
  6. "HDTV Code Crack Is Real, Intel Confirms". Fox News. 2010-09-16.
  7. Intel Confirms That HDCP Master Key is Cracked
  8. Wired. «Intel Threatens to Sue Anyone Who Uses HDCP Crack».
  9. "HDMI Specification 1.3a" (PDF). HDMI Licensing, LLC. 2006-11-10., Секция: 5.3.6 General Control Packet

Ссылки