Шифрование
Pepeunit использует шифрование AES256
с 16 байтовым
инициирующим вектором и 32 байтовым
ключом - схема шифрования CBC
def aes_encode(data: str, key: str = settings.encrypt_key) -> str:
"""
data: any python str
key: (base64 str) 16, 24, 32 bytes sync encrypt key
return: (base64 str - iv).(base64 str - encrypted data)
"""
key = base64.b64decode(key.encode())
iv = os.urandom(16)
# set encrypter
encrypter = pyaes.Encrypter(pyaes.AESModeOfOperationCBC(key, iv))
# encrypted binary to base64 str
cipher = base64.b64encode(encrypter.feed(data) + encrypter.feed()).decode('utf-8')
return f"{base64.b64encode(iv).decode('utf-8')}.{cipher}"
def aes_decode(data: str, key: str = settings.encrypt_key) -> str:
"""
data: (base64 str - iv).(base64 str - encrypted data)
key: (base64 str) 16, 24, 32 bytes sync encrypt key
return: decode python str
"""
key = base64.b64decode(key.encode())
iv = base64.b64decode(data.split('.')[0].encode())
# set decrypter
decrypter = pyaes.Decrypter(pyaes.AESModeOfOperationCBC(key, iv))
# data (iv).(encrypted text) to binary encrypted text
cipher = base64.b64decode(data.split('.')[1].encode())
return (decrypter.feed(cipher) + decrypter.feed()).decode('utf-8')
Какие данные шифрует Pepeunit?
Все конфиденциальные данные, а именно:
- Динамическая соль, использующаяся для хэширования пароля Пользователя
- Авторизационные данные, отвестветвенные за доступ до удалённых приватных репозиториев
- Файлы окружений - env.json от Unit
- Хранилище внутреннего состояния Unit
Ограничение размера шифруемых объектов
Все шифруемые объекты имеют стандартное ограничение в 50000
символов. Администратор инстанса может изменить этот объём установив переменную окружения BACKEND_MAX_CIPHER_LENGTH
в файле Backend ENV.
Размер в 50000
выбран из-за приемлимой скорости шифрования-дешифрования алгоритмом AES256
.
DANGER
Администратор имеющий доступ к Backend ENV инстанса Pepeunit, имеет возможность расшифровать данные хранящиеся в шифрованном виде на его инстансе.
Поэтому пользуйтесь только инстансами Pepeunit Администраторам которых вы доверяете.
Шифрованная информация не передаётся между инстансами и хранится на инстансе создания сущности, остальные инстансы получают ограниченное представление о первичной сущности.