# Проблема раскрытия 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 устройства в определенном формате для генерации ключа, что делает атаки крайне сложными и маловероятными.