diff --git a/problems/problem_hwid.md b/problems/problem_hwid.md new file mode 100644 index 0000000..2518760 --- /dev/null +++ b/problems/problem_hwid.md @@ -0,0 +1,15 @@ +# Проблема раскрытия HWID устройства + +Для того, чтобы сделать вход на нескольких устройствах безопасным, Rosetta могла бы использовать HWID (Hardware ID) устройства, который бы генерировался на основе уникальных характеристик устройства, таких как серийный номер, MAC-адрес и т.д. Однако, раскрытие HWID может привести к проблемам безопасности, так как злоумышленник может использовать эту информацию для идентификации и отслеживания устройства. + +### 1. Злоумышленник зашел с нового устройства +Злоумышленник зашел с нового устройства, то есть подтвердил вход по сид-фразе. Он мог ее украсть. В этот момент Rosetta отправляет ему пакеты синхронизации (переписки, которые были до этого на другом устройстве). Имея сид-фразу, по которой злоумышленник уже зашел, например украв ее или подсмотрев, он может легко расшифровать пакеты синхронизации и получить доступ к перепискам пользователя. Это может привести к серьезным последствиям, таким как утечка личной информации, компрометация аккаунта и т.д. Из этой проблемы мы делаем вывод, что нужна система подтверждения новых устройств, которая бы не позволяла злоумышленнику, даже имея сид-фразу, получить доступ к перепискам пользователя. + +### 2. Раскрытие HWID +Если бы Rosetta использовала HWID для идентификации устройств, злоумышленник, имея доступ к HWID, мог бы использовать эту информацию для отслеживания устройства и его владельца. Это может привести к нарушению конфиденциальности и безопасности пользователя. Поэтому важно не раскрывать HWID и использовать другие методы для обеспечения безопасности входа. Например сохранение случайного уникального идентификатора для каждого устройства. + +### 3. Украли случайный идентификатор +В случае воровства случайного идентификатора из хранилища приложения, злоумышленник мог бы использовать его для того, чтобы "подделать" пакет рукопожатия с сервером, и получить доступ к синхронизации, так как сервер мог бы подумать, что это легитимное устройство. Это может привести к раскрытию переписок и личной информации пользователя. Поэтому важно обеспечить безопасность хранения случайного идентификатора или невозможность его подделать. + +# Решение, использованное в Rosetta +Rosetta не использует HWID для идентификации устройств, вместо этого генерируется [уникальный идентификатор (для каждого устройства) ](https://git.rosetta.im/Rosetta/desktop/src/commit/265b60b35ac8647a1aa196e28049f32a851401c5/app/providers/SystemProvider/SystemProvider.tsx#L43) при первом запуске приложения на устройстве. Этот идентификатор не раскрывает никакой информации о самом устройстве и используется только для внутренних целей приложения, таких как синхронизация и управление сессиями. Это обеспечивает безопасность и конфиденциальность пользователей, так как злоумышленник не может использовать этот идентификатор для отслеживания устройства или его владельца. Чтобы идентификатор не мог быть украден, [он шифруется с помощью AES256 и специального ключа, который генерируется на основе РЕАЛЬНОГО HWID](https://git.rosetta.im/Rosetta/desktop/src/commit/265b60b35ac8647a1aa196e28049f32a851401c5/app/providers/SystemProvider/SystemProvider.tsx#L69) устройства, но при этом не раскрывает его серверу и потенциальным злоумышленникам. Таким образом, даже если злоумышленник получит доступ к этому идентификатору, он не сможет использовать его для подделки пакетов рукопожатия или получения доступа к синхронизации. Теперь, чтобы подделать рукопожатие, злоумышленнику нужно будет не только украсть идентификатор, но и скомпрометировать реальный HWID устройства в определенном формате для генерации ключа, что делает атаки крайне сложными и маловероятными. \ No newline at end of file