Шифрование
Pepeunit использует шифрование AES256
с 12 байтовым
инициирующим вектором и 32 байтовым
ключом - схема шифрования GCM
def aes_gcm_encode(data: str, key: str = settings.backend_encrypt_key) -> str:
"""
data: any python str
key: (base64 str) 16, 24, 32 bytes sync encrypt key
return: (base64 str - nonce).(base64 str - encrypted data).(base64 str - tag)
"""
len_content = len(data)
if len_content > settings.backend_max_cipher_length:
app_errors.cipher_error.raise_exception(
f'The encryption content is {len_content} long, although only <= {settings.backend_max_cipher_length} is allowed'
)
key = base64.b64decode(key.encode())
nonce = os.urandom(12) # 96-bit nonce for AES-GCM
aesgcm = AESGCM(key)
cipher = aesgcm.encrypt(nonce, data.encode(), None) # Encrypt data
return f"{base64.b64encode(nonce).decode()}.{base64.b64encode(cipher).decode()}"
def aes_gcm_decode(data: str, key: str = settings.backend_encrypt_key) -> str:
"""
data: (base64 str - nonce).(base64 str - encrypted data)
key: (base64 str) 16, 24, 32 bytes sync encrypt key
return: decode python str
"""
key = base64.b64decode(key.encode())
nonce, cipher = data.split('.')
nonce = base64.b64decode(nonce.encode())
cipher = base64.b64decode(cipher.encode())
aesgcm = AESGCM(key)
return aesgcm.decrypt(nonce, cipher, None).decode('utf-8')
Какие данные шифрует Pepeunit?
Все конфиденциальные данные, а именно:
- Динамическая соль, использующаяся для хэширования пароля Пользователя
- Авторизационные данные, отвестветвенные за доступ до удалённых приватных репозиториев
- Файлы окружений - env.json от Unit
- Хранилище внутреннего состояния Unit
Ограничение размера шифруемых объектов
Все шифруемые объекты имеют стандартное ограничение в 1000000
символов. Администратор инстанса может изменить этот объём установив переменную окружения BACKEND_MAX_CIPHER_LENGTH
в файле Backend ENV.
DANGER
Администратор имеющий доступ к Backend ENV инстанса Pepeunit, имеет возможность расшифровать данные хранящиеся в шифрованном виде на его инстансе.
Поэтому пользуйтесь только инстансами Pepeunit Администраторам которых вы доверяете.
Шифрованная информация не передаётся между инстансами и хранится на инстансе создания сущности, остальные инстансы получают ограниченное представление о первичной сущности.