CRYPTO.MN
ENCRYPTION

RSA

RSA нь public key болон private key хосоор ажилладаг асимметрик криптографийн алгоритм бөгөөд түлхүүр хамгаалалттай дамжуулах, тоон гарын үсэг үүсгэхэд ашиглагддаг.

Стандарт
RFC 8017
PKCS #1 v2.2
Түлхүүрийн урт
2048, 3072, 4096 бит
түгээмэл түлхүүрийн хэмжээ
Nonce-ийн урт
Хамаарахгүй
RSA-д тогтмол nonce параметр байхгүй. OAEP нь санамсаргүй утга ашигладаг.
Баталгаажуулах tag
Хамаарахгүй
RSA нь AES-GCM шиг authentication tag ашигладаггүй.

Чухал анхааруулга

  • RSA-г шууд, padding-гүйгээр бүү ашигла.
  • Шифрлэлтийн үед RSA-OAEP, тоон гарын үсгийн үед RSA-PSS зэрэг зориулалтын схем сонго.
  • Шинэ системд 2048 битээс бага түлхүүр бүү ашигла; аюулгүй байдлын шаардлага, хамгаалах хугацаанаас хамааран 3072 бит болон түүнээс дээш түлхүүр сонгож болно.
  • Private key-г хамгаал.
  • RSA нь пост-квант аюулгүй биш тул урт хугацаанд нууц хадгалах системд пост-квант шилжилтийн төлөвлөгөө шаардлагатай.

Юу вэ?

RSA (Rivest–Shamir–Adleman) нь public key болон private key гэсэн хос түлхүүр ашигладаг асимметрик криптографийн алгоритм юм.

Public key-г бусадтай хуваалцаж болох бол private key-г нууцлан хамгаалах шаардлагатай. RSA-г зөв схемээр ашиглавал мэдээллийг нууцлах, тоон гарын үсэг үүсгэх боломжтой.

RSA нь AES шиг их хэмжээний мэдээллийг шууд шифрлэхэд тохиромжтой биш. Ихэвчлэн AES зэрэг симметрик алгоритмын санамсаргүй түлхүүрийг хамгаалах, эсвэл тоон гарын үсэг үүсгэхэд ашигладаг.

RSA-ийн аюулгүй байдал нь хангалттай том тоонуудын үржвэрийг анхны үржигдэхүүн болгон задлах асуудлын тооцооллын хүндрэлд тулгуурладаг.

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

RSA нь хоорондоо математик холбоотой public key болон private key ашиглана.

  1. Түлхүүр үүсгэх

    Систем RSA түлхүүрийн хос үүсгэнэ. Public key-г бусдад өгч болох бөгөөд private key-г зөвшөөрөлгүй хүнээс хамгаална.

  2. Мэдээллийг шифрлэх

    Хүлээн авагчийн public key-г ашиглан RSA-OAEP схемээр жижиг хэмжээний нууц мэдээлэл, жишээлбэл AES түлхүүрийг шифрлэнэ.

  3. Мэдээллийг тайлах

    Хүлээн авагч өөрийн private key-г ашиглан шифрлэсэн мэдээллийг тайлна.

  4. Тоон гарын үсэг үүсгэх

    Илгээгч private key-гээ ашиглан RSA-PSS зэрэг схемээр мэдээлэлд гарын үсэг үүсгэнэ. Хүлээн авагч public key-ээр гарын үсгийг шалгаж, мэдээлэл өөрчлөгдсөн эсэх болон тухайн private key-тэй холбоотой гарын үсэг мөн эсэхийг баталгаажуулна.

RSA-OAEP нь шифрлэлтийн схем, RSA-PSS нь тоон гарын үсгийн схем юм. Эдгээрийг RSA алгоритмтай холбоотой боловч тусдаа зориулалттай схемүүд гэж ойлгоно.

Хаана ашиглагддаг вэ?

  • TLS сертификат ба тоон гарын үсэг
  • PKI дэд бүтэц
  • кодын гарын үсэг
  • баримт бичгийн гарын үсэг
  • AES түлхүүрийг хамгаалах
  • хуучин нийцтэй системүүд

Түгээмэл алдаа

  • RSA-г padding-гүйгээр шууд ашиглах
  • RSA-OAEP-ийн оронд хуучин эсвэл тохиромжгүй шифрлэлтийн схем сонгох
  • RSA-PSS-ийн оронд шинэ системд шаардлагагүй хуучин гарын үсгийн схем сонгох
  • Private key-г код, Git repository эсвэл логт хадгалах
  • RSA-г их хэмжээний файл шифрлэхэд шууд ашиглах
  • Public key-г эзэмшигчтай нь баталгаажуулахгүйгээр итгэх
  • Санамсаргүй тоо үүсгэгчийг буруу ашиглан түлхүүр үүсгэх
  • RSA-г квант компьютерт тэсвэртэй гэж үзэх

Жишээ код

Python
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes

# RSA түлхүүрийн хос үүсгэх
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=3072,
)
public_key = private_key.public_key()

message = b"Hello, Cryptography!"

# Public key ашиглан шифрлэх
ciphertext = public_key.encrypt(
    message,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None,
    ),
)

# Private key ашиглан тайлах
plaintext = private_key.decrypt(
    ciphertext,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None,
    ),
)

print(plaintext.decode())

ENCRYPTION ангилалын бусад алгоритм