标签: RSA

  • openssl-genrsa

    openssl-genrsa

    名称

    openssl-genrsa – generate an RSA private key

    概述

    openssl genrsa [-help] [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-aria128] [-aria192] [-aria256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-F4] [-f4] [-3] [-primes num] [-verbose] [-quiet] [-traditional] [-rand files] [-writerand file] [-engine id] [-provider name] [-provider-path path] [-propquery propq] [numbits]

    描述

    这个命令可以生成RSA私钥

    命令语法

    • -help

      帮助

    • -passout arg

      写入密钥文件时的密码

    • -out

      指定要写入密钥的输出文件名,如果未指定此选项,则使用标准输出。如果设置了任何加密选项,则会提示输入密码。输出文件名不应与输入文件名相同。

    • -aes128, -aes192, -aes256, -aria128, -aria192, -aria256, -camellia128, -camellia192, -camellia256, -des, -des3, -idea

      指定加密密钥的算法
      输出私钥之前,会使用指定的加密算法对其进行加密。系统会提示输入密码。如果未指定任何加密算法,则密钥将以纯文本形式写入。如果使用加密,则如果未通过 -passout 参数提供密码,则会提示输入密码。

    • -F4, -f4, -3

      要使用的公共指数,65537 或 3。默认值为 65537。-3 选项已被弃用。

    • -primes num

      指定生成 RSA 密钥时要使用的素数数量。num 参数必须是大于 1 且小于 16 的正整数。如果 num 大于 2,则生成的密钥称为“多素数”RSA 密钥,该用法在 RFC 8017 中定义。多素数会减少计算量,但也会降低复杂度,素数越多素数的长度越短。
      默认情况下是2个素数,经过我的测试可以指定以下值

      素数数量 最短私钥长度
      5 8192
      4 4096
      3 1024
      2 512
    • -verbose

      执行时输出更多的信息

    • -quiet

      输出更少的信息,这在批处理和使用管道时很方便,尤其是密钥生成期间抑制进度.的输出。

    • -traditional

      写入密钥时使用PKCS#1格式,默认是PKCS#8格式。PKCS#1仅能存储RSA密钥,PKCS#8是对PKCS#1的升级可以支持多种算法密钥存储。

    • -rand files, -writerand file

      指定随机数状态保存的文件,读取之前的随机数生成器状态并写入当前状态用于下次执行的时候继续使用。现在OpenSSL已经从操作系统中读取熵源,这个选项不再需要,只是在特殊情况下才有用。

    • -engine id

      指定engine id,这个选项已经废弃

    • -provider name

      指定provider name

    • -provider-path path

      provider的路径

    • -propquery propq

      provider中的属性

    • numbits

      要生成的私钥的大小(以bit为单位)。这必须是指定的最后一个选项。默认值为 2048,不允许小于 512 的值。注意这个是参数而不是选项。

    NOTES

    RSA 私钥生成本质上涉及两个或多个素数的生成。生成私钥时,将输出各种符号以指示生成的进度。 . 表示每个数字都已通过初始筛选测试,+ 表示数字已通过一轮 Miller-Rabin 素数测试,* 表示当前素数由于一些测试失败而开始重新生成。换行符表示数字已通过所有素数测试(实际数量取决于密钥大小)。

    由于 Miller-Rabin 素数测试是概率性测试,测试素数时根据待测试数的位长度自动选择合适的轮数来增加准确性。以下是一些常见位长度下的默认轮数:

    • 对于512位以下的数,默认轮数为 8。
    • 对于512位到1024位的数,默认轮数为 5。
    • 对于1024位到2048位的数,默认轮数为 4。
    • 对于2048位到4096位的数,默认轮数为 3。
    • 对于4096位以上的数,默认轮数为 2。

    由于密钥生成是一个随机过程,因此生成密钥所需的时间可能会有所不同。但一般来说,素数越多,密钥的生成时间越短。

    Views: 0

  • openssl-rsa

    openssl-rsa

    名字

    openssl-rsa – RSA key processing command

    概述

    openssl rsa [-help] [-inform DER|PEM|P12|ENGINE] [-outform DER|PEM] [-in filename|uri] [-passin arg] [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-aria128] [-aria192] [-aria256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-traditional] [-check] [-pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-pvk-strong] [-pvk-weak] [-pvk-none] [-engine id] [-provider name] [-provider-path path] [-propquery propq]

    描述

    此命令处理 RSA 密钥。它们可以在各种形式之间转换,并打印出它们的组成部分。

    选项

    • -help

      帮助

    • -inform DER|PEM|P12|ENGINE

      读取的密钥格式

    • -outform DER|PEM

      写入的密钥格式

    • -traditional

      写入密钥时使用PKCS#1格式,默认是PKCS#8格式。PKCS#1仅能存储RSA密钥,PKCS#8是对PKCS#1的升级可以支持多种算法密钥存储。

    • -in filename|uri

      指定密钥文件的路径,如果不指定则从终端读取,如果有密码还会提示输入密码

    • -passin arg, -passout arg

      指定读取和写入密钥文件时的密码

    • -out

      指定要写入密钥的输出文件名,如果未指定此选项,则使用标准输出。如果设置了任何加密选项,则会提示输入密码。输出文件名不应与输入文件名相同。

    • -aes128, -aes192, -aes256, -aria128, -aria192, -aria256, -camellia128, -camellia192, -camellia256, -des, -des3, -idea

      指定加密密钥的算法
      输出私钥之前,会使用指定的加密算法对其进行加密。系统会提示输入密码。如果未指定任何加密算法,则密钥将以纯文本形式写入。这意味着,此命令可用于通过不提供任何加密选项来从密钥中删除密码,或者通过设置密码来添加或更改密码。这些选项只能用于 PEM 格式的输出文件(These options can only be used with PEM format output files.DER不加密吗)。

    • -text

      除了编码版本外还以文本方式打印私钥的内容

    • -noout

      不打印编码的私钥

    • -modulus

      打印私钥的模数

    • -check

      检查私钥的完整性

    • -pubin

      默认情况下,从输入中读取私钥。使用此选项则改为读取公钥。如果输入不包含公钥但包含私钥,则使用其公钥部分(This option is automatically set if the input is a public key.)。
      实际测试指定这个选项时只读取公钥,不指定时私钥和公钥都会读取。

    • -pubout

      输出公钥而不是私钥
      实际测试指定这个选项时只输出公钥,不指定时私钥和公钥都会输出,如果都有的话。

    • RSAPublicKey_in, -RSAPublicKey_out

      同-pubin和-pubout,只不过用RSAPublicKey格式代替

    • -pvk-strong

      开启强PVK encoding level,默认开启。
      pvk是微软开发的私钥存储格式,使用pvk格式文件时生效,我测试时使用-outform pvk只有指定-pvk-none才成功生成pvk格式的私钥

    • -pvk-weak

      开启弱PVK encoding level

    • -pvk-none

      不使用PVK encoding

    • -engine id

      指定engine id,这个选项已经废弃

    • -provider name

      指定provider name

    • -provider-path path

      provider的路径

    • -propquery propq

      provider中的属性

    Views: 1

  • 数字签名算法

    数字签名算法分为两种一种是对称签名算法,一种是非对称签名算法

    • 非对称签名算法

      DSA,RSA,ECDSA这些都是非对称签名算法,先用SHA算法对明文做hash运算获取摘要信息,然后用私钥对摘要信息进行加密,接收方用公钥对加密后的摘要信息解密并与明文的摘要信息进行对比。非对称签名算法可以在不安全通道中进行。
      非对称签名算法通常用于身份认证和数字证书。
      签名算法要与Hash算法一起使用,一般写作RSA-SHA256,ECDSA-SHA512。

    • 对称签名算法

      HMAC,CMAC,GMAC这些都是对称签名算法,使用一个对称的共享密钥和消息(可以加密前hash也可以加密后hash,CCM是加密前验证,GCM是加密后验证)作为输入(类似加盐,其实就是标准化的加盐算法)生成摘要信息,然后把摘要信息发送给对方,对方也使用共享的密钥和消息(通常是加密后的)作为输入生成摘要信息。
      HMAC是基于Hash的MAC算法,CMAC和GMAC是基于对移加密的MAC算法(在加密的同时生成MAC),HMAC速度更快。
      AES-GMAC(CTR模式)是一个仅生成MAC然后把加密后的密文给丢掉的算法,是AES-GCM去掉了加密功能。但在有的资料中指去掉了AE功能的GCM(可能是误用)。
      AES-CMAC(CBC模式)是通过对前一段密文进行异或然后做AES加密来生成MAC,过程与CBC模式一致,仅支持签名,不支持加密。
      对称签名算法通常与其它加密算法一起使用,如用密钥交换算法生成共享密钥,使用AES算法加密消息。
      对称签名算法运算速度快,通常用于数据完整性验证。
      签名算法要与Hash算法一起使用,一般写作HMAC-SHA256,HMAC-SHA512。
      HMAC的定义可以查看RFC2104

    Views: 6