Как зашифровать CTR AES256 с помощью простого текстового пароля? - PullRequest
0 голосов
/ 21 сентября 2018

Я работаю с этим примером , чтобы попытаться зашифровать данные с помощью AES-256.Однако, когда я использую пароль WeakPasswordForTesting в качестве ввода, я получаю сообщение об ошибке: crypto/aes: invalid key size.У меня складывается впечатление, что это связано с длиной моего простого пароля.Как я могу использовать этот пример кода для шифрования данных с помощью короткого простого текстового пароля?

func Encrypt(password []byte, plainSource []byte) ([]byte, error) {
    key, _ := hex.DecodeString(string(password))
    block, err := aes.NewCipher(key)
    if err != nil {
        panic(err)
    }

    // The IV needs to be unique, but not secure. Therefore it's common to
    // include it at the beginning of the ciphertext.
    ciphertext := make([]byte, aes.BlockSize+len(plainSource))
    iv := ciphertext[:aes.BlockSize]
    if _, err := io.ReadFull(rand.Reader, iv); err != nil {
        panic(err)
    }
    stream := cipher.NewCTR(block, iv)
    stream.XORKeyStream(ciphertext[aes.BlockSize:], plainSource)

    return ciphertext, nil
}

1 Ответ

0 голосов
/ 21 сентября 2018

Advanced Encryption Standard (AES) - это блочный шифр , который ожидает ключ фиксированного размера.Длина ключа указана в имени шифра: AES- 256 означает длину ключа 256 бит.

Поскольку ваш пароль не является ключом, соответствующим этой спецификации, вам необходимореализовать процесс, чтобы сделать это так.Общим механизмом является функция вывода ключа , которая принимает входную ключевую фразу энтропии, значительно меньшую, чем требуемая длина ключа, и дополняет ее различными данными, чтобы получить ключ требуемой длины. PBKDF семейство (функция получения ключа на основе пароля) является примером этого, как и scrypt .


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

Этот вопрос на crypto.SE может быть интересен в отношении более тщательной оценки рекомендаций по внедрению с использованием PBKDF2.

...