GO_INTERVIEW_LIB Telegram 382
💬 Почему crypto/rand в некоторых кейсах предпочтительнее использовать вместо math/rand для генерации ключей в Go?

Когда мы работаем над проектами, связанными с генерацией ключей, будь то для шифрования или для создания уникальных идентификаторов, важны качество и безопасность этих ключей.

Пакет math/rand отлично подходит для генерации псевдослучайных чисел. Но у этого метода есть серьезный недостаток: если кто-то узнает, как генерируются числа (начальное значение seed), он сможет предсказать будущие числа.


import "math/rand"

func Key() string {
// rand.Seed(time.Now().UnixNano()) // deprecated
r := rand.New(rand.NewSource(time.Now().UnixNano()))

buf := make([]byte, 16)

for i := range buf {
buf[i] = byte(r.Intn(256))
}

return fmt.Sprintf("%x", buf)
}


Даже если мы инициализируем генератор с чем-то вроде текущего времени, уровень непредсказуемости или энтропии будет довольно низким. Это происходит потому, что вариации времени между запусками незначительны.

С другой стороны, crypto/rand предлагает лучшее решение для генерации чисел, которые криптографически безопасны. Эта библиотека разработана для полной непредсказуемости, используя источники случайности, предоставляемые ОС, которые обычно гораздо сложнее предсказать.


import "crypto/rand"

func Key() string {
buf := make([]byte, 16)

_, err := rand.Read(buf)
if err != nil {
panic(err)
}

return fmt.Sprintf("%x", buf)
}


Использование crypto/rand особенно необходимо для операций, таких как шифрование, аутентификация или любой другой контекст, где безопасность имеет критическое значение.

Опять же, если мы генерируем ключи для целей, не связанных с безопасностью, math/rand вполне подойдет.
👍114



tgoop.com/go_interview_lib/382
Create:
Last Update:

💬 Почему crypto/rand в некоторых кейсах предпочтительнее использовать вместо math/rand для генерации ключей в Go?

Когда мы работаем над проектами, связанными с генерацией ключей, будь то для шифрования или для создания уникальных идентификаторов, важны качество и безопасность этих ключей.

Пакет math/rand отлично подходит для генерации псевдослучайных чисел. Но у этого метода есть серьезный недостаток: если кто-то узнает, как генерируются числа (начальное значение seed), он сможет предсказать будущие числа.


import "math/rand"

func Key() string {
// rand.Seed(time.Now().UnixNano()) // deprecated
r := rand.New(rand.NewSource(time.Now().UnixNano()))

buf := make([]byte, 16)

for i := range buf {
buf[i] = byte(r.Intn(256))
}

return fmt.Sprintf("%x", buf)
}


Даже если мы инициализируем генератор с чем-то вроде текущего времени, уровень непредсказуемости или энтропии будет довольно низким. Это происходит потому, что вариации времени между запусками незначительны.

С другой стороны, crypto/rand предлагает лучшее решение для генерации чисел, которые криптографически безопасны. Эта библиотека разработана для полной непредсказуемости, используя источники случайности, предоставляемые ОС, которые обычно гораздо сложнее предсказать.


import "crypto/rand"

func Key() string {
buf := make([]byte, 16)

_, err := rand.Read(buf)
if err != nil {
panic(err)
}

return fmt.Sprintf("%x", buf)
}


Использование crypto/rand особенно необходимо для операций, таких как шифрование, аутентификация или любой другой контекст, где безопасность имеет критическое значение.

Опять же, если мы генерируем ключи для целей, не связанных с безопасностью, math/rand вполне подойдет.

BY Библиотека Go для собеса | вопросы с собеседований


Share with your friend now:
tgoop.com/go_interview_lib/382

View MORE
Open in Telegram


Telegram News

Date: |

Add up to 50 administrators ‘Ban’ on Telegram Ng Man-ho, a 27-year-old computer technician, was convicted last month of seven counts of incitement charges after he made use of the 100,000-member Chinese-language channel that he runs and manages to post "seditious messages," which had been shut down since August 2020. How to create a business channel on Telegram? (Tutorial) SUCK Channel Telegram
from us


Telegram Библиотека Go для собеса | вопросы с собеседований
FROM American