RSA-PSS
RSA-PSS нь RSA нийтийн түлхүүрийн криптографид суурилсан, санамсаргүй salt ашиглан тоон гарын үсгийн аюулгүй байдлыг хангахад зориулагдсан орчин үеийн гарын үсгийн схем юм.
- Стандарт
- RFC 8017
- PKCS#1 v2.2
- Түлхүүрийн урт
- 2048, 3072, 4096 bit
Чухал анхааруулга
- RSA-PSS нь найдвартай тоон гарын үсгийн схем боловч зөв тохиргоо болон түлхүүрийн хамгаалалт шаарддаг.
- Хувийн түлхүүрийг хамгаалах: зөвшөөрөлгүй этгээд хувийн түлхүүрт нэвтэрвэл хуурамч гарын үсэг үүсгэх боломжтой.
- Параметрүүдийг нийцүүлэх: хэш функц, MGF тохиргоо болон salt-ийн уртыг гарын үсэг үүсгэх, шалгах талд нийцүүлнэ.
- Гарын үсгийг шифрлэлттэй андуурахгүй байх: RSA-PSS нь мэдээллийг нууцлахгүй.
- Санамсаргүй үүсгүүрийг зөв ашиглах: salt үүсгэхэд криптографийн зориулалттай найдвартай санамсаргүй үүсгүүр ашиглана.
- Нийтийн түлхүүрийн эзэмшигчийг шалгах: гарын үсэг математикийн хувьд хүчинтэй байх нь тухайн хүн, байгууллагын таних тэмдгийг дангаараа батлахгүй.
- Квантын эрсдэл: хангалттай хүчин чадалтай квант компьютер Shor-ийн алгоритмыг хэрэгжүүлж чадвал RSA-PSS-ийн аюулгүй байдлын үндэс болсон RSA бодлогыг эвдэх боломжтой.
- RSA-PSS нь пост-квант алгоритм биш.
Юу вэ?
RSA-PSS (RSA Probabilistic Signature Scheme) нь RSA нийтийн түлхүүрийн криптографид суурилсан, магадлалын шинжтэй тоон гарын үсгийн схем юм. Энэ нь RFC 8017 буюу PKCS #1 v2.2 стандартад тодорхойлогдсон.
RSA-PSS-ийн үндсэн зорилго нь мэдээллийг хэн илгээсэн болохыг баталгаажуулах, мөн мэдээлэл өөрчлөгдсөн эсэхийг илрүүлэхэд оршино.
RSA-PSS нь дараах хоёр түлхүүрийг ашигладаг: - Private Key: гарын үсэг үүсгэхэд ашигладаг нууц түлхүүр. - Public Key: гарын үсгийг шалгахад ашигладаг нийтийн түлхүүр. RSA-PSS нь санамсаргүй salt утгыг гарын үсгийн тооцоололд ашигладаг. Иймээс ижил мессеж болон ижил түлхүүр ашигласан ч өөр salt хэрэглэвэл өөр гарын үсэг үүсэх боломжтой.
PSS нь RSA гарын үсгийн хуучин PKCS #1 v1.5 схемээс ялгаатай дүүргэлтийн арга ашигладаг. Түүний аюулгүй байдлын шинж чанарыг RSA бодлогын хүндрэлд суурилсан, тодорхой таамаглал болон random oracle загвар дахь нотолгоогоор судалсан байдаг. Энэ нь бүх нөхцөлд халдашгүй гэсэн баталгаа биш бөгөөд зөв параметр, найдвартай хэрэгжүүлэлт шаардлагатай.
Чухал: RSA-PSS нь мэдээллийг шифрлэхгүй. Энэ нь мэдээллийн бүрэн бүтэн байдал болон гарын үсэг үүсгэсэн түлхүүрийн эзэмшигчийг баталгаажуулахад зориулагдсан.
Хэрхэн ажилладаг вэ?
RSA-PSS нь мессежийн хэш, salt болон RSA хувийн түлхүүрийг ашиглан тоон гарын үсэг үүсгэдэг.
1. Мессежийн хэш тооцоолох
Гарын үсэг зурах мессежийг SHA-256 зэрэг хэш функцээр боловсруулж, тогтмол урттай хэш утга гаргана.
2. Salt үүсгэх
Криптографийн зориулалттай санамсаргүй үүсгүүрээр salt үүсгэнэ. Salt-ийн урт нь ашиглаж буй параметрийн тохиргооноос хамаарна.
3. PSS encoding хийх
Мессежийн хэш болон salt-ийг ашиглан PSS схемийн дагуу кодчилол үүсгэнэ. Энэ шатанд хэшийн тооцоолол, mask generation function (MGF1 гэх мэт) болон дүүргэлтийн бүтэц оролцдог.
4. Гарын үсэг үүсгэх
Кодчилсон утгад RSA хувийн түлхүүрийн үйлдлийг хэрэглэж, тоон гарын үсэг үүсгэнэ.
5. Гарын үсгийг шалгах
Хүлээн авагч мессеж, гарын үсэг болон илгээгчийн нийтийн түлхүүрийг ашиглан RSA-PSS-ийн шалгалтыг хийнэ. Мессеж өөрчлөгдсөн, гарын үсэг буруу эсвэл параметрүүд тохироогүй бол шалгалт амжилтгүй болно.
6. Үр дүнг үнэлэх
Шалгалт амжилттай бол тухайн гарын үсэг нийтийн түлхүүртэй математик холбоотой мессежид хүчинтэй болохыг батална. Гэхдээ нийтийн түлхүүр үнэхээр хэн нэгэн хүн, байгууллагад харьяалагддаг эсэхийг батлахын тулд сертификат эсвэл өөр итгэмжлэгдсэн механизм шаардлагатай.
Хаана ашиглагддаг вэ?
- TLS 1.3 TLS 1.3-д серверийн таних тэмдгийг баталгаажуулах гарын үсгийн схемүүдийн дунд RSA-PSS-ийн тохирох хувилбарууд байдаг. Энэ нь холболтын үеэр серверийн гарын үсгийг шалгахад ашиглагдаж болно. X.509 сертификат RSA-PSS-ийг нийтийн түлхүүрийн сертификат болон гэрчилгээжүүлэлтийн гинжин хэлхээнд гарын үсэг үүсгэх
- шалгахад ашиглаж болно. Гэхдээ бодит дэмжлэг нь сертификат
- түлхүүрийн төрөл болон программын нийцлээс хамаарна. Программ хангамжийн гарын үсэг Программ
- шинэчлэлтийн багц болон бусад дижитал артефактын бүрэн бүтэн байдлыг баталгаажуулахад ашиглаж болно. API болон мессежийн баталгаажуулалт Мессеж эсвэл өгөгдлийн хэш дээр тоон гарын үсэг үүсгэж
- хүлээн авагчид өөрчлөгдөөгүй эсэхийг шалгах боломж олгоно. Баримт бичгийн баталгаажуулалт Зөв түлхүүрийн эзэмшигч гарын үсэг зурсан эсэх болон гарын үсэг зурсан мэдээлэл өөрчлөгдсөн эсэхийг шалгах системд ашиглаж болно.
Түгээмэл алдаа
- RSA-PSS-ийг шифрлэлтийн алгоритм гэж ойлгох: энэ нь зөвхөн тоон гарын үсэг үүсгэх, шалгах зориулалттай.
- Ижил мессежид ижил гарын үсэг гарна гэж үзэх: санамсаргүй salt ашигладаг тул гарын үсэг өөр байж болно.
- Хэш болон salt-ийн параметрийг зөрүүлэх: шалгалт амжилтгүй болоход хүргэнэ.
- Хэт богино RSA түлхүүр ашиглах: орчин үеийн системд дор хаяж 2048 битийн түлхүүрийг түгээмэл сонгодог.
- Гарын үсэг хүчинтэй гэдгийг илгээгч баталгаатай танигдлаа гэж ойлгох: нийтийн түлхүүрийн итгэлцлийг тусад нь баталгаажуулна.
- Хуучин PKCS #1 v1.5 болон PSS схемийг андуурах: эдгээр нь RSA гарын үсгийн өөр өөр схемүүд бөгөөд протоколын шаардлагад тохируулан сонгоно.
- RSA-PSS-ийг квантын халдлагад тэсвэртэй гэж үзэх: пост-квант хамгаалалт шаардлагатай бол ML-DSA, SLH-DSA зэрэг стандартчилагдсан схемийг авч үзнэ.
Жишээ код
import {
generateKeyPairSync,
sign,
verify,
constants,
} from "node:crypto";
// RSA түлхүүрийн хос үүсгэх
const { publicKey, privateKey } = generateKeyPairSync("rsa", {
modulusLength: 2048,
});
// Гарын үсэг зурах мессеж
const message = Buffer.from("Hello, RSA-PSS!");
// RSA-PSS гарын үсэг үүсгэх
const signature = sign("sha256", message, {
key: privateKey,
padding: constants.RSA_PKCS1_PSS_PADDING,
saltLength: 32,
});
// Гарын үсгийг шалгах
const isValid = verify("sha256", message, {
key: publicKey,
padding: constants.RSA_PKCS1_PSS_PADDING,
saltLength: 32,
}, signature);
console.log("Signature valid:", isValid);