CRYPTO.MN
Анхан

Password хэрхэн зөв хадгалах вэ?

Нууц үгийг plaintext хэлбэрээр хадгалах нь мэдээллийн сан алдагдсан үед хэрэглэгчдийг эрсдэлд оруулдаг. Иймээс Argon2id, scrypt, PBKDF2 зэрэг нууц үгэнд зориулсан алгоритм ашиглан hash үүсгэж хадгална. Salt нь ижил нууц үгнээс өөр hash үүсгэхэд тусалдаг. Мөн нууц үгийг шифрлэлтийн түлхүүр болгох шаардлагатай үед KDF ашиглах хэрэгтэй.

Зохиогч:
Turmandakh
Нийтэлсэн:
3 мин унших
Password storage

Яагаад нууц үгийг шууд хадгалж болохгүй вэ?

Хэрэглэгч системд бүртгүүлэхдээ нууц үг оруулдаг. Хэрэв систем нууц үгийг энгийн текстээр (Plaintext) хадгалбал мэдээллийн сан алдагдсан үед хэрэглэгчдийн нууц үг шууд ил болно.

Жишээ нь:

text
Username: bat
Password: password123

Ийм байдлаар хадгалах нь аюултай. Тиймээс нууц үгийг plaintext хэлбэрээр хэзээ ч хадгалж болохгүй.

Үүний оронд нууц үгэнд зориулсан hashing алгоритм ашиглаж, гарсан үр дүнг мэдээллийн санд хадгална.

Яагаад SHA-256 хангалтгүй вэ?

SHA-256 нь өгөгдлөөс тогтмол урттай hash утга гаргадаг криптографийн hash функц юм. Гэхдээ энэ нь нууц үг хадгалахад тусгайлан зориулагдаагүй.

SHA-256 маш хурдан ажилладаг учраас халдагч мэдээллийн санг олж авбал олон төрлийн нууц үгийг таамаглан hash-тай нь харьцуулж чадна.

Иймээс нууц үг хадгалахад зориудаар илүү их тооцоолол, нөөц шаарддаг алгоритм ашигладаг.

Түгээмэл сонголтууд:

  • Argon2id — шинэ системүүдэд түгээмэл зөвлөдөг сонголт.
  • scrypt — тооцоолол болон санах ойн нөөц шаарддаг.
  • PBKDF2 — олон удаагийн тооцоолол ашиглан нууц үгнээс hash үүсгэдэг.

Password Hashing хэрхэн ажилладаг вэ?

Нууц үгийг хадгалахдаа дараах үйл явцыг ашиглана:

text
Хэрэглэгчийн нууц үг
          +
      Random Salt
          ↓
 Password Hashing KDF
          ↓
      Hash утга
          ↓
    Database-д хадгална

Хэрэглэгч дахин нэвтрэх үед оруулсан нууц үгийг хадгалсан salt болон ижил тохиргоотой алгоритмаар шалгаж, хадгалсан үр дүнтэй тохирч байгаа эсэхийг баталгаажуулна.

Ингэснээр системд хэрэглэгчийн эх нууц үгийг хадгалах шаардлагагүй болно.

Salt гэж юу вэ?

Salt гэдэг нь нууц үг боловсруулах үед нэмдэг санамсаргүй утга юм.

Хоёр хэрэглэгч ижил нууц үг ашигласан ч өөр өөр salt хэрэглэвэл хадгалагдах hash утгууд нь өөр байна.

Salt-ийн гол үүрэг:

  • Ижил нууц үг ижил hash үүсгэхээс сэргийлэх;
  • Урьдчилан тооцоолсон hash хүснэгтийн үр нөлөөг бууруулах;
  • Хэрэглэгч бүрийн нууц үгийг тус тусад нь таамаглах шаардлага үүсгэх.

Salt нь нууц байх шаардлагагүй. Гэхдээ хэрэглэгч бүрд зориулж аюулгүй санамсаргүй байдлаар үүсгэж, тухайн hash-ийн хамт хадгалах хэрэгтэй.

Password ба Encryption Key-ийн ялгаа

Хэрэглэгчийн нууц үгийг AES зэрэг алгоритмын түлхүүр болгон шууд ашиглах нь аюултай. Учир нь нууц үг хүний сонголтоос хамаардаг тул таамаглахад хялбар байж болно.

Хэрэв нууц үгнээс шифрлэлтийн түлхүүр үүсгэх шаардлагатай бол Key Derivation Function (KDF) ашиглана.

text
Password
    ↓
Key Derivation Function
    +
Salt болон тохиргоо
    ↓
Cryptographic Key

Password hashing-д Argon2id, scrypt, PBKDF2 зэрэг алгоритм ашиглаж болно. Харин нууц үгнээс шифрлэлтийн түлхүүр гаргах үед тухайн зориулалтад тохирсон KDF болон зөв тохиргоо сонгох шаардлагатай.

Гол анхаарах зүйлс

  • Нууц үгийг plaintext хэлбэрээр хадгалж болохгүй.
  • Password storage-д энгийн SHA-256 дангаар нь ашиглаж болохгүй.
  • Боломжтой үед Argon2id зэрэг нууц үгэнд зориулсан алгоритм сонгоно.
  • Хэрэглэгч бүрд давтагдашгүй random salt үүсгэнэ.
  • KDF-ийн тохиргоог орчин үеийн аюулгүй байдлын зөвлөмжид нийцүүлнэ.
  • Нууц үгийн hash алдагдсан ч халдагч нууц үгийг таах оролдлого хийх боломжтой тул бусад хамгаалалтыг мөн хэрэгжүүлнэ.

Дүгнэлт

Нууц үгийг зөв хадгалах нь хэрэглэгчийн бүртгэлийн системийн аюулгүй байдлын үндсэн хэсэг юм. Нууц үгийг шууд хадгалахын оронд salt болон нууц үгэнд зориулсан KDF ашиглан боловсруулсан үр дүнг хадгална.

Гол санаа: Нууц үг хадгалах зорилго нь эх нууц үгийг буцаан гаргаж авах биш, хэрэглэгчийн оруулсан нууц үг зөв эсэхийг аюулгүй шалгах явдал юм.

Бататгах асуулт

Асуулт 1/3

Нууц үгийг яагаад plaintext хэлбэрээр хадгалж болохгүй вэ?

Энэ нийтлэл танд таалагдсан уу?