openssl 3.0与FIPS

openssl配置的几个概念

openssl.conf

.include /path/to/fipsmodule.cnf

[openssl_init]
providers = provider_sect
alg_section = alg_sect

[provider_sect]
default = default_sect
fips = fips_sect

[default_sect]
activate = 0

[alg_sect]
default_properties = fips=yes

/path/to/fipemodule.cnf

[fips_sect]
activate = 1
conditional-errors = 1
security-checks = 1
module-mac = 12:F1:...:67:03

一个概念provider,和algrithm:

  1. 一个provider是一组algrithm的合集,也包括一些provider内属性。
  2. 例子里有两个provider:default和fips
  3. fips这个provider自动具有"fips=yes"的属性,但是default这个provider自动具有的属性是”fips=no"。
    3.1 也可以通过程序OSSL_PROVIDER_load/OSSL_PROVIDER_unload来加载和卸载一个provider。
  4. provider的属性activate=1表示是否可以用available。即OSSL_PROVIDER_available()返回true或者false。
    4.1:但是default这个provider的activate属性无效,它总是available的。
  5. alg_sect里的default_properties表示algritmh的缺省查找provider属性,其中前缀default_表示缺省的意思,不是表示default这个provider。
    5.1 简单的说,就是用户要查找一个algrithm时,如果没有指定从哪个provider里面查找(通过提供provider属性的方法),那么就使用这里定义的属性来表示从哪一个provider里面查找。

给一个程序例子

    char * providernames[] = {"default", "fips"};
    for (int i = 0; i < 2; i++) {
        printf("Provider %s: %s\n", providernames[i], OSSL_PROVIDER_available(NULL, providernames[i]) == 1 ? "available" : "unavailable");
    }

判断一个provider是否可用,如果在配置文件里activate=1表示可用,activate=0表示不可用。
当然default这个provider除外,它总是可以,不管activate的值。

    OSSL_PROVIDER* provider = OSSL_PROVIDER_load(NULL, "fips");
    if (provider == NULL) {
        printf("Load provider '%s' failed\n", providername);
    } else {
        printf("Load provider '%s' succes\n", providername);
    }

    ...
    OSSL_PROVIDER_unload(provider);

加载和卸载一个provider。

    int fips_default_enable = EVP_default_properties_is_fips_enabled(NULL);
    printf("FIPS default enabled=%d/%s\n", fips_default_enable, fips_default_enable == 1 ? "true": "false");

检查FIPS defaut enable属性,这个值就是配置文件里的[alg_sect]节下的default_properties = fips=yes属性值。这个值也可以通过程序修改:

    if (!EVP_default_properties_enable_fips(NULL, 1)) {
        printf("Failed to sett default fips enable\n");
    }

下面获取algrithim

        md = EVP_MD_fetch(NULL, "SHA256", NULL);
        if (md == NULL) {
            printf("Provider is %s\n", "NULL");
        } else {
            printf("Provider is %s\n", OSSL_PROVIDER_get0_name(EVP_MD_get0_provider(md)));
        }

这个地方能获取是从那个provider里面取得algrithm,比如'default', 还是'fips'。

举例来说:

ID [alg_sect]default_properties = fips=no [alg_sect]default_properties = fips=yes
EVP_MD_fetch(NULL, "MD5", NULL) default NULL
EVP_MD_fetch(NULL, "SHA256", NULL) default fips
EVP_MD_fetch(NULL, "MD5", "fips=no") default default
EVP_MD_fetch(NULL, "SHA256", "fips=no") default default
EVP_MD_fetch(NULL, "MD5", "fips=yes") NULL NULL
EVP_MD_fetch(NULL, "SHA256", "fips=yes") fips FIPS

结论:
EVP_MD_fetch如果参数指定了provider属性(fips=yes)那么具有高优先权。

  • fips=no那么就从default这个provider里面取,因为default这个provider的fips=no。
  • fips=yes那么就从fips这个provider里面取,因为fips这个provider的fips=yes。
  • fips没指定,那么从algrithm指定的属性里面查询:
    • default_properties = fips=no,表示缺省找default这个provider
    • default_properties = fips=yes, 表示缺省找fips这个provider。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容