From 011585cdb0c3f8462adfbc8476753d5fdac49c5d Mon Sep 17 00:00:00 2001 From: Arduanov Danil Date: Sat, 20 Jan 2024 09:06:25 +0500 Subject: [PATCH 1/4] Translate first and second chapter --- guide/ru/security/cryptography.md | 116 ++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 guide/ru/security/cryptography.md diff --git a/guide/ru/security/cryptography.md b/guide/ru/security/cryptography.md new file mode 100644 index 0000000..89796a2 --- /dev/null +++ b/guide/ru/security/cryptography.md @@ -0,0 +1,116 @@ +# Криптография + +В этом разделе мы рассмотрим следующие аспекты безопасности: + +- Генерация случайных данных +- Шифрование и расшифровка +- Проверка целостности данных + +Для использования этих функций, вам нужно установить пакет `yiisoft/security`: + +``` +composer install yiisoft/security +``` + +## Генерация псевдослучайных данных + +Псевдослучайные данные используются во многих ситуациях. +Например, при изменении пароля по email, вам необходимо сгенерировать токен, сохранить его в базу данных и отправить по email пользователю, чтобы он с помощью него подтвердил владение аккаунтом. +Важно чтобы этот токен был уникальным и его было трудно угадать, иначе есть вероятность, что атакующий может предсказать значение токена и сбросить пароль пользователя. + +Класс `\Yiisoft\Security\Random` делает генерацию псевдослучайных данных простой: + +```php +$key = \Yiisoft\Security\Random::string(42); +``` + +Код выше даст вам случайную строку, включающую 42 символа. + +Если вам нужны байты или целые числа, напрямую используйте функции PHP: + +- `random_bytes()` для байт. Обратите внимание, что вывод может быть не ASCII. +- `random_int()` для целых чисел. + +## Encryption and Decryption + +Yii provides convenient helper functions to encrypt/decrypt data using a secret key. +The data are passed through the encryption function so that only the person which has the secret key will be able +to decrypt it. +For example, you need to store some information in your database, but you need to make sure only +the user who has the secret key can view it (even if one compromises the application database): + +```php +$encryptedData = (new \Yiisoft\Security\Crypt())->encryptByPassword($data, $password); + +// save data to database or another storage +saveData($encryptedData); +``` + +Decrypting it: + +```php +// obtain encrypted data from a database or another storage +$encryptedData = getEncryptedData(); + +$data = (new \Yiisoft\Security\Crypt())->decryptByPassword($encryptedData, $password); +``` + +You could use a key instead of password: + +```php +$encryptedData = (new \Yiisoft\Security\Crypt())->encryptByKey($data, $key); + +// save data to database or another storage +saveData($encryptedData); +``` + +Decrypting it: + +```php +// obtain encrypted data from a database or another storage +$encryptedData = getEncryptedData(); + +$data = (new \Yiisoft\Security\Crypt())->decryptByKey($encryptedData, $key); +``` + +## Confirming data integrity + +There are situations in which you need to verify that your data haven't been tampered with by a third party or even +corrupted in some way. Yii provides a way to confirm data integrity by MAC signing. + +The `$key` should be present at both sending and receiving sides. On the sending side: + +```php +$signedMessage = (new \Yiisoft\Security\Mac())->sign($message, $key); + +sendMessage($signedMessage); +``` + +At the receiving side: + +```php +$signedMessage = receiveMessage($signedMessage); + +try { + $message = (new \Yiisoft\Security\Mac())->getMessage($signedMessage, $key); +} catch (\Yiisoft\Security\DataIsTamperedException $e) { + // data is tampered +} +``` + +## Masking token length + +Masking a token helps to mitigate BREACH attack by randomizing how token outputted on each request. +A random mask applied to the token making the string always unique. + +To mask a token: + +```php +$maskedToken = \Yiisoft\Security\TokenMask::apply($token); +``` + +To get original value from the masked one: + +```php +$token = \Yiisoft\Security\TokenMask::remove($maskedToken); +``` From 4d7b3b9c2ae06e0c6bb3e0cad85fc9fbac078201 Mon Sep 17 00:00:00 2001 From: Arduanov Danil Date: Sat, 20 Jan 2024 09:32:34 +0500 Subject: [PATCH 2/4] Translate 3 chapter --- guide/ru/security/cryptography.md | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/guide/ru/security/cryptography.md b/guide/ru/security/cryptography.md index 89796a2..883a0db 100644 --- a/guide/ru/security/cryptography.md +++ b/guide/ru/security/cryptography.md @@ -31,43 +31,41 @@ $key = \Yiisoft\Security\Random::string(42); - `random_bytes()` для байт. Обратите внимание, что вывод может быть не ASCII. - `random_int()` для целых чисел. -## Encryption and Decryption +## Шифрование и расшифровка -Yii provides convenient helper functions to encrypt/decrypt data using a secret key. -The data are passed through the encryption function so that only the person which has the secret key will be able -to decrypt it. -For example, you need to store some information in your database, but you need to make sure only -the user who has the secret key can view it (even if one compromises the application database): +Yii предоставляет удобные вспомогательные функции для шифрования/расшифровки данных с помощью секретного кллюча. +Данные проходят через функцию шифрования таким образом, что только тот, кто знает секретный ключ, может расшифровать их. +Например, вам нужно сохранить некоторую информацию в вашей базе данных, но вы должны быть уверены, что только пользователь, который знает секретный ключ, сможет расшифровать их (даже если кто-нибудь скомпрометирует базу данных приложения) ```php $encryptedData = (new \Yiisoft\Security\Crypt())->encryptByPassword($data, $password); -// save data to database or another storage +// сохранение данных в базу данных или другое хранилище saveData($encryptedData); ``` -Decrypting it: +Расшифровка: ```php -// obtain encrypted data from a database or another storage +// получение зашифрованных данных их базы данных или другого хранилища $encryptedData = getEncryptedData(); $data = (new \Yiisoft\Security\Crypt())->decryptByPassword($encryptedData, $password); ``` -You could use a key instead of password: +Вы можете использовать ключ вместо пароля: ```php $encryptedData = (new \Yiisoft\Security\Crypt())->encryptByKey($data, $key); -// save data to database or another storage +// сохранение данных в базу данных или другое хранилище saveData($encryptedData); ``` -Decrypting it: +Расшифровка: ```php -// obtain encrypted data from a database or another storage +// получение зашифрованных данных их базы данных или другого хранилища $encryptedData = getEncryptedData(); $data = (new \Yiisoft\Security\Crypt())->decryptByKey($encryptedData, $key); From 04f31aaba645f0a9c03457ab764ca3783194fcc9 Mon Sep 17 00:00:00 2001 From: Arduanov Danil Date: Sat, 20 Jan 2024 10:08:11 +0500 Subject: [PATCH 3/4] Translate 4 chapter --- guide/ru/security/cryptography.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/guide/ru/security/cryptography.md b/guide/ru/security/cryptography.md index 883a0db..0f6f414 100644 --- a/guide/ru/security/cryptography.md +++ b/guide/ru/security/cryptography.md @@ -47,7 +47,7 @@ saveData($encryptedData); Расшифровка: ```php -// получение зашифрованных данных их базы данных или другого хранилища +// получение зашифрованных данных из базы данных или другого хранилища $encryptedData = getEncryptedData(); $data = (new \Yiisoft\Security\Crypt())->decryptByPassword($encryptedData, $password); @@ -65,18 +65,18 @@ saveData($encryptedData); Расшифровка: ```php -// получение зашифрованных данных их базы данных или другого хранилища +// получение зашифрованных данных из базы данных или другого хранилища $encryptedData = getEncryptedData(); $data = (new \Yiisoft\Security\Crypt())->decryptByKey($encryptedData, $key); ``` -## Confirming data integrity +## Проверка целостности данных -There are situations in which you need to verify that your data haven't been tampered with by a third party or even -corrupted in some way. Yii provides a way to confirm data integrity by MAC signing. +Бывают ситуации, когда вам необходимо убедиться, что ваши данные не были подделаны третьей стороной или испорчены каким-то образом. +Yii предоставляет способ проверить целостность данных по MAC подписи. -The `$key` should be present at both sending and receiving sides. On the sending side: +Ключ `$key` должен присутствовать как на отправляющей, так и на принимающей стороне. На отправляющей стороне: ```php $signedMessage = (new \Yiisoft\Security\Mac())->sign($message, $key); @@ -84,7 +84,7 @@ $signedMessage = (new \Yiisoft\Security\Mac())->sign($message, $key); sendMessage($signedMessage); ``` -At the receiving side: +На принимающей стороне: ```php $signedMessage = receiveMessage($signedMessage); @@ -92,7 +92,7 @@ $signedMessage = receiveMessage($signedMessage); try { $message = (new \Yiisoft\Security\Mac())->getMessage($signedMessage, $key); } catch (\Yiisoft\Security\DataIsTamperedException $e) { - // data is tampered + // данные подделаны } ``` From 3dfadf1a0fd0ae98c0eb4745a1634505181073dd Mon Sep 17 00:00:00 2001 From: Arduanov Danil Date: Sat, 20 Jan 2024 10:52:04 +0500 Subject: [PATCH 4/4] Translate 5 chapter --- guide/ru/security/cryptography.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/guide/ru/security/cryptography.md b/guide/ru/security/cryptography.md index 0f6f414..26ca27c 100644 --- a/guide/ru/security/cryptography.md +++ b/guide/ru/security/cryptography.md @@ -96,18 +96,17 @@ try { } ``` -## Masking token length +## Маскировка длины токена -Masking a token helps to mitigate BREACH attack by randomizing how token outputted on each request. -A random mask applied to the token making the string always unique. +Маскировка токена помогает смягчить атаку BREACH за счет рандомизации способа вывода токена при каждом запросе. К токену применяется случайная маска, делающая строку всегда уникальной. -To mask a token: +Для маскировки токена: ```php $maskedToken = \Yiisoft\Security\TokenMask::apply($token); ``` -To get original value from the masked one: +Получить исходное начение из замаскированного: ```php $token = \Yiisoft\Security\TokenMask::remove($maskedToken);