Randomness, Key, Nonce ба IV
Криптографийн хамгаалалт нь зөв алгоритмаас гадна санамсаргүй тоо болон түлхүүрийг зөв ашиглахаас хамаардаг. Энэ хичээлээр Cryptographic Randomness, AES түлхүүрийн хэмжээ, IV ба Nonce-ийн үүрэг, AES-GCM дээр Nonce давтан ашиглах эрсдэл болон Private Key-г аюулгүй хадгалах үндсэн зарчмуудыг сурна.
- Зохиогч:
- Turmandakh
- Нийтэлсэн:

1. Криптографид санамсаргүй байдал яагаад чухал вэ?
Криптографийн систем хүчтэй алгоритм ашиглаж байсан ч түлхүүрийг таамаглах боломжтой байдлаар үүсгэсэн бол хамгаалалт нь алдагдаж болно.
Жишээлбэл, AES-256 алгоритм нь зөв хэрэглэвэл өндөр түвшний нууцлал хангаж чадна. Гэхдээ түүний түлхүүрийг урьдчилан таах боломжтой утгаар үүсгэсэн бол халдагч түлхүүрийг олж, мэдээллийг тайлах эрсдэлтэй.
Криптографид санамсаргүй байдал дараах зүйлсэд чухал үүрэгтэй:
- Шифрлэлтийн түлхүүр үүсгэх
- IV болон Nonce үүсгэх
- Нууц баталгаажуулалтын утга үүсгэх
- Зарим протоколын түр зуурын нууц утгуудыг бий болгох
Энд гол шаардлага нь зүгээр л санамсаргүй мэт харагдах бус, утгыг халдагч таамаглахад маш хэцүү байх явдал юм.
2. Cryptographic Randomness гэж юу вэ?
Cryptographic Randomness гэдэг нь криптографийн хэрэглээнд тохирох, таамаглахад бэрх санамсаргүй утга үүсгэх ойлголт юм.
Програмчлалын олон хэлэнд санамсаргүй тоо үүсгэх энгийн функц байдаг. Гэхдээ бүх санамсаргүй тоо криптографид тохирохгүй.
Жишээлбэл, JavaScript-ийн:
Math.random()функц нь тоглоом, энгийн симуляци зэрэгт тохиромжтой боловч нууц түлхүүр үүсгэхэд зориулагдаагүй.
Node.js дээр криптографийн зориулалттай санамсаргүй байт үүсгэхдээ crypto.randomBytes() ашиглаж болно.
import { randomBytes } from "node:crypto";
// 32 байт буюу 256 бит түлхүүр
const key = randomBytes(32);
console.log(key.toString("hex"));Энэ код 32 байт санамсаргүй утга үүсгэнэ. Hex хэлбэрээр хэвлэвэл 64 тэмдэгттэй мөр харагдана. Гэхдээ hex мөр нь түлхүүрийн текстэн дүрслэл болохоос түлхүүр өөрөө 64 байт болсон гэсэн үг биш.
Санамж: Бодит системд түлхүүрийг console эсвэл production log-д хэвлэхгүй. Жишээг зөвхөн сургалтын орчинд ажиллуулна.
3. Cryptographic Key гэж юу вэ?
Key буюу криптографийн түлхүүр нь мэдээллийг шифрлэх, тайлах эсвэл криптографийн бусад үйлдэл гүйцэтгэхэд ашигладаг утга юм.
AES-256 алгоритмын хувьд түлхүүрийн хэмжээ 256 бит буюу 32 байт байна.
Түлхүүрийн хэмжээБайт128 бит16 байт192 бит24 байт256 бит32 байт
Түлхүүрийн урт чухал боловч зөвхөн урт байх нь хангалтгүй. Түлхүүрийг хэрхэн үүсгэсэн, хаана хадгалсан, хэнд хандах эрх өгсөн зэрэг нь мөн адил чухал.
Жишээлбэл, дараах байдлаар түлхүүрийг код дотор шууд бичих нь эрсдэлтэй:
const key = "my-secret-key-123";Энэ мөр нь AES-256-д шаардлагатай 32 байтын түлхүүр биш бөгөөд нууц утгыг код дотор ил гаргаж байна. Мөн түлхүүрийг хэрэглэгчийн нууц үгтэй адилтгаж болохгүй.
4. IV ба Nonce гэж юу вэ?
IV (Initialization Vector) болон Nonce (Number used once) нь криптографийн алгоритмын ажиллах явцад ашиглагддаг нэмэлт утгууд юм.
Эдгээр нь ихэнх хэрэглээнд нууц байх шаардлагагүй. Харин алгоритмын шаардлагын дагуу зөв үүсгэж, зөв ашиглах ёстой.
IV — Initialization Vector
IV нь тодорхой шифрлэлтийн горимын эхлэлийн утга юм. Зорилго нь ижил түлхүүрээр ижил мэдээлэл шифрлэхэд үр дүн нь нөхцөлөөс хамааран ялгаатай гарахад туслах зэрэг юм.
Nonce — Number used once
Nonce нь нэг удаагийн хэрэглээнд зориулагдсан утга юм. Зарим алгоритмд тухайн түлхүүртэй хамт дахин ашиглахыг хориглодог.
IV болон Nonce-ийн шаардлага бүх алгоритмд ижил биш. Зарим горимд IV санамсаргүй байх шаардлагатай бол заримд нь давтагдахгүй байх шаардлага голлодог.
Чухал: IV эсвэл Nonce-г заавал нууцлах шаардлагагүй ч тухайн алгоритмын дүрмийг зөрчиж болохгүй.
5. AES-GCM дээр Nonce-г дахин ашиглахын аюул
AES-GCM нь мэдээллийн нууцлалаас гадна мэдээлэл өөрчлөгдсөн эсэхийг шалгах боломж олгодог шифрлэлтийн горим юм.
Гэхдээ ижил түлхүүртэй ижил Nonce-г дахин ашиглах нь ноцтой аюул үүсгэдэг.
Жишээлбэл:
Key = K
Nonce = N
Message = AДараа нь:
Key = K
Nonce = N
Message = BИжил K болон N-г хоёр өөр мэдээлэлд дахин ашиглаж байна. AES-GCM дээр ийм алдаа нь нууцлал болон мэдээллийн бүрэн бүтэн байдлын хамгаалалтыг эвдэх боломж олгож болно.
Тиймээс нэг түлхүүрийн хүрээнд Nonce-г дахин ашиглахгүй байх шаардлагыг хатуу мөрдөнө.
Практикт системийн хэрэгцээнээс хамааран:
- 96 битийн Nonce ашиглах;
- Nonce үүсгэх аргыг урьдчилан зөв төлөвлөх;
- Нэг түлхүүрийн хүрээнд давхцахаас сэргийлэх;
- Түлхүүр солих болон ашиглалтын тоонд хязгаар тавих
зэрэг арга хэрэглэж болно.
96 битийн Nonce нь AES-GCM-д түгээмэл хэрэглэгддэг хэмжээ юм. Санамсаргүй Nonce ашиглах үед олон удаа үүсгэх тусам давхцах магадлал нэмэгддэг тул өндөр хэмжээний шифрлэлтийн системд энэ эрсдэлийг тооцох хэрэгтэй.
6. Түлхүүр, IV болон Nonce-ийн ялгаа
ҮзүүлэлтKeyIVNonceҮүрэгКриптографийн үндсэн нууц утгаГоримын эхлэлийн утгаНэг удаагийн хэрэглээний утгаНууц байх шаардлагаИхэнхдээ тиймАлгоритмаас хамаарна, ихэвчлэн үгүйИхэнхдээ үгүйГол шаардлагаТаамаглахад бэрх, аюулгүй хадгалалтГоримын шаардлагыг хангахТухайн түлхүүрийн хүрээнд давтахгүй байх шаардлага түгээмэлЖишээAES-256 түлхүүрCBC горимын IVAES-GCM Nonce
Эдгээр ойлголт хоорондоо холбоотой боловч орлуулж болохгүй. Түлхүүр нь нууцлалын үндсэн хамгаалалтыг бүрдүүлдэг бол IV болон Nonce нь алгоритмын зөв ажиллагаанд тусалдаг.
7. Private Key-г хэрхэн аюулгүй хадгалах вэ?
Асимметрик криптографид Public Key болон Private Key гэсэн түлхүүрийн хос ашигладаг. Public Key-г бусадтай хуваалцаж болох бол Private Key-г хамгаалах шаардлагатай.
Private Key алдагдвал системийн зохион байгуулалтаас хамааран халдагч гарын үсэг хуурамчаар үүсгэх, шифрлэсэн мэдээлэлд хандах зэрэг эрсдэл бий болно.
Дараах үйлдлээс зайлсхийх хэрэгтэй:
- Private Key-г source code-д шууд бичих
- GitHub зэрэг репозиторт түлхүүрээ оруулах
- Production log-д хэвлэх
- Browser-ийн frontend JavaScript руу нууц түлхүүр дамжуулах
- Түлхүүрийн файлыг шаардлагагүй хэрэглэгчдэд унших эрхтэй байлгах
Production орчинд дараах шийдлүүдийг ашиглаж болно:
- Operating System Key Store: Үйлдлийн системийн түлхүүр хадгалах хамгаалалттай сан
- Secret Manager: Нууц утга болон түлхүүрийн хандалтыг удирдах үйлчилгээ
- HSM (Hardware Security Module): Түлхүүрийг тусгай хамгаалалттай төхөөрөмжид хадгалж, криптографийн үйлдэл гүйцэтгэх шийдэл
Аль шийдлийг сонгох нь системийн эрсдэл, шаардлага болон өртгөөс хамаарна.
8. Гол санааг нэгтгэе
Криптографийн хамгаалалт нь алгоритм сонгохоор дуусахгүй. Түлхүүрийг зөв үүсгэх, IV болон Nonce-г алгоритмын шаардлагад нийцүүлэн ашиглах, нууц утгуудыг аюулгүй хадгалах шаардлагатай.
Санах үндсэн зарчмууд:
- Криптографийн түлхүүрийг
Math.random()ашиглан үүсгэхгүй. - AES-256 түлхүүр 32 байт байна.
- IV болон Nonce заавал нууц байх албагүй ч зөв ашиглах ёстой.
- AES-GCM дээр ижил түлхүүртэй Nonce-г дахин ашиглаж болохгүй.
- Private Key-г код, репозитор болон log-д ил гаргахгүй.
Эдгээр зарчмыг мөрдвөл криптографийн нийтлэг алдаанаас сэргийлэхэд тусална.
Бататгах асуулт
Асуулт 1/3
Криптографийн түлхүүр үүсгэхэд яагаад Math.random() ашиглаж болохгүй вэ?
Энэ нийтлэл танд таалагдсан уу?