Andy
Forward from: Illusion Of Chaos
Вчера, во время совещания Путина с членами правительства, министр цифрового развития Максут Шадаев рассказал о готовности системы цифровых паспортов на базе мобильного приложения Госуслуг, утверждая, что в 80% повседневных сценариев для подтверждения личности и возраста будет достаточно продемонстрировать QR-код из приложения. «У нас технология полностью согласована с ФСБ, реализована как безопасная и защищённая» — заявил президенту министр.
Сразу после совещания в официальном телеграм-канале Минцифры появилась видеоинструкция по данному функционалу. Из этого видео можно узнать, что его создатели любят поэзию, так как в QR-коде, использованном для демонстрации, содержится текст 106-го сонета Шекспира на английском языке.
В iOS версии приложения возможность подтверждения возраста с помощью QR-кода появилась еще в начале ноября прошлого года, но даже в актуальной версии разработчики до сих пор не смогли привести интерфейс проверки в соответствие с задуманным дизайном (как на видео) — сейчас там просто пишется "old 18", независимо от реального возраста.
Я посмотрел формат содержимого QR-кодов для подтверждения паспортных данных и возраста, а также фрагмент кода андроид-приложения Госуслуг, который отвечает за проверку считываемых данных. Данные внутри QR-кода подписаны цифровой подписью (PS256), которая должна использоваться для проверки достоверности данных. Приложение считывает эту подпись и ID сертификата, который использовался для её создания, находит этот сертификат в хранилище, и… и всё, если сертификат нашёлся, то подпись считается действительной. Одну строчку кода, который бы производил проверку подписи, добавить забыли. Возможно, последний сотрудник, который разбирался в криптографии, уехал на самокате через Верхний Ларс, а без него нормально доделать не смогли. Причём, адекватной проверки подписи нет ни в iOS-версии, ни в Android.
Это ещё полбеды. Даже если с десятой попытки они смогут сделать криптографию как положено, то в заявленном виде система всё равно имеет критическую уязвимость. Невозможно проверить личность человека по фотографии, которая отображается только на его устройстве, пусть даже рядом с какими-то данными, имеющими цифровую подпись. Допустим, человек в магазине бытовой техники, оформляя кредит на товар, показывает QR-код вместо паспорта. Продавец отправляет этот код сообщнику, который в другом месте оформляет на этого человека еще один кредит, показав на экране свою фотографию вместе с чужим QR-кодом.
Единственная возможность создать систему для подтверждения личности в оффлайн режиме через один QR-код — сжимать фото до 2 килобайт и добавлять цифровую подпись одновременно к фото и к паспортным данным. QR-код вмещает максимум 2953 байта. Для наглядности, фотография в следующем сообщении как раз сжата до требуемого размера, чтобы было видно качество. Также есть вариант замены QR-кодов на альтернативы, позволяющие передать больше данных за раз.
В онлайн режиме проверяющий может делать на своё устройство фото лица проверяемого и загружать на Госуслуги, где фото будет автоматически сверено нейросетью с базой Роспаспорт и выдано заключение о подтверждении личности.
Но при любом сценарии, на устройстве проверяющего будет фотография проверяемого, и эту фотографию он сможет сохранить и далее использовать в своих целях. Либо так, либо достоверно подтвердить личность невозможно.
Как ФСБ умудрилась согласовать такую систему, с несертифицированной и неработающей криптографией — вопрос риторический. Но если сейчас примут законопроект, который приравняет это к удостоверению личности — будет катастрофа.
Не сомневаюсь, что кто-то, прочитав это сообщение, сразу побежит писать об этом в незаконную программу Bug Bounty, в надежде получить миллион рублей, но за такое вам ничего не заплатят.
К счастью, генерация QR-кодов пока не считается подделкой документов, так что ниже — два примера поддельных кодов, которые без проблем считываются приложением Госуслуг как настоящие.
Сразу после совещания в официальном телеграм-канале Минцифры появилась видеоинструкция по данному функционалу. Из этого видео можно узнать, что его создатели любят поэзию, так как в QR-коде, использованном для демонстрации, содержится текст 106-го сонета Шекспира на английском языке.
В iOS версии приложения возможность подтверждения возраста с помощью QR-кода появилась еще в начале ноября прошлого года, но даже в актуальной версии разработчики до сих пор не смогли привести интерфейс проверки в соответствие с задуманным дизайном (как на видео) — сейчас там просто пишется "old 18", независимо от реального возраста.
Я посмотрел формат содержимого QR-кодов для подтверждения паспортных данных и возраста, а также фрагмент кода андроид-приложения Госуслуг, который отвечает за проверку считываемых данных. Данные внутри QR-кода подписаны цифровой подписью (PS256), которая должна использоваться для проверки достоверности данных. Приложение считывает эту подпись и ID сертификата, который использовался для её создания, находит этот сертификат в хранилище, и… и всё, если сертификат нашёлся, то подпись считается действительной. Одну строчку кода, который бы производил проверку подписи, добавить забыли. Возможно, последний сотрудник, который разбирался в криптографии, уехал на самокате через Верхний Ларс, а без него нормально доделать не смогли. Причём, адекватной проверки подписи нет ни в iOS-версии, ни в Android.
Это ещё полбеды. Даже если с десятой попытки они смогут сделать криптографию как положено, то в заявленном виде система всё равно имеет критическую уязвимость. Невозможно проверить личность человека по фотографии, которая отображается только на его устройстве, пусть даже рядом с какими-то данными, имеющими цифровую подпись. Допустим, человек в магазине бытовой техники, оформляя кредит на товар, показывает QR-код вместо паспорта. Продавец отправляет этот код сообщнику, который в другом месте оформляет на этого человека еще один кредит, показав на экране свою фотографию вместе с чужим QR-кодом.
Единственная возможность создать систему для подтверждения личности в оффлайн режиме через один QR-код — сжимать фото до 2 килобайт и добавлять цифровую подпись одновременно к фото и к паспортным данным. QR-код вмещает максимум 2953 байта. Для наглядности, фотография в следующем сообщении как раз сжата до требуемого размера, чтобы было видно качество. Также есть вариант замены QR-кодов на альтернативы, позволяющие передать больше данных за раз.
В онлайн режиме проверяющий может делать на своё устройство фото лица проверяемого и загружать на Госуслуги, где фото будет автоматически сверено нейросетью с базой Роспаспорт и выдано заключение о подтверждении личности.
Но при любом сценарии, на устройстве проверяющего будет фотография проверяемого, и эту фотографию он сможет сохранить и далее использовать в своих целях. Либо так, либо достоверно подтвердить личность невозможно.
Как ФСБ умудрилась согласовать такую систему, с несертифицированной и неработающей криптографией — вопрос риторический. Но если сейчас примут законопроект, который приравняет это к удостоверению личности — будет катастрофа.
Не сомневаюсь, что кто-то, прочитав это сообщение, сразу побежит писать об этом в незаконную программу Bug Bounty, в надежде получить миллион рублей, но за такое вам ничего не заплатят.
К счастью, генерация QR-кодов пока не считается подделкой документов, так что ниже — два примера поддельных кодов, которые без проблем считываются приложением Госуслуг как настоящие.