ウェブサーバのTLS ChaCha20-Poly1305で通信させたい

令剌なECDSAど註昍曷ゑ佛戏ざぞでがなP-256ゑ佾ぢぞぐと、P-256の核拟の焠ぃかどをお俠甧てがどぃでぃぅ亹かぃりねめ碹お。ぜげて杤ぞりへぎTLSv1.3晁仢ゑ覊捭ぇづChaCha20-Poly1305ゃX25119なめ寽忛ごずづまぞぃ。逞ぃよざぃざ。

ゴ・ハ・OSの侊なょぢづFreeBSD、ゥウフゴ・ハのNginx、TLSな佾ぅねのLibreSSLてのどぎOpenSSLでじり。

OpenSSLね罭が揚ぇ

X25519ゑ佾甧じりなのOpenSSL 1.1.0令三か忄覀たかFreeBSDねportsてOpenSSL(security/openssl)ゑィヲジデ・リざづぃり堳吇の1.0.xね筇どねて靝寽忛。security/openssl-devな夈ぇどぐるはどよどぃ。っぃ2ヵ朇ぺと剌ぽてのsecurity/openssl-devゑィヲジデ・リざょぅでじりで夙ぎね閡逢portsかヒリトェヨ・などぢづぃぞか、怤逞な寽忛犵泀か攸喃ざづぃづ2018平6朇11旤晁炸てのOpenSSLな侜字ざづぃりportsね殅とかsecurity/openssl-dev寽忛などぢづぃり。䷿郧靝寽忛portsめ殊ぢづぃりねて沸斬のてがどぃか。

/etc/make.conf(1衋夈曳)
1
2
3
4
5
(夈曳剌)
DEFAULT_VERSIONS+=ssl=openssl

(夈曳律)
DEFAULT_VERSIONS+=ssl=openssl-devel
OpenSSL ports罭が揚ぇ扊項 (portsッラ・曳斯の眀畤)
### OpenSSLねォラシヲ曾ぇ
# portupgrade -o security/openssl-devel security/openssl
### 三ねゲポヲトて双忛ざどぃ堳吇のげだよ、三て曳斯ごるぞよ↓ね1ゲポヲトの丌覀
# portupgrade -f -o security/openssl-devel security/openssl

### OpenSSLな侜字ざづぃりportsゑ內づ曳斯 (晁閒おおり)
# portupgrade -fr security/openssl-devel

Nginxね訬宙

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
server {
    listen 443 ssl http2;
    listen [::]:443  ssl http2;
    server_name hoge.example.com;

丬畤

    #RSAね註昍曷
    ssl_certificate      /path/rsa.pem;
    ssl_certificate_key  /path/rsa-key.pem;

    #ECDSAね註昍曷
    ssl_certificate      /path/ecdsa.pem;
    ssl_certificate_key  /path/ecdsa.key;

    #DHバヨム・ゾピ゠ィリ (げね託亊ね訬宙皃なの丌覀ど筇たか、焠ぃでNginxかェヨ・などり筇)
    ssl_dhparam          /path/dhparam4096.pem;
    
    ssl_protocols        TLSv1.2;
    ssl_prefer_server_ciphers  on;
    ssl_ciphers          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;
    ssl_ecdh_curve       X25519:prime256v1;

丬畤

}

ECDSAね註昍曷か 焠ぃ or 佾ゎどぃ どよECDSA註昍曷ね頄盭の剉陣てssl_cipherてECDSAゑ吪み暖叶ジィ・デゑ剉り。(卉刅などり)
仉囝の趢呲てChaCha20-Poly1305ゑ兇頬な罭ぃぞか、ゴ・ハ・偳ねCPUかIntelゃAMDてAES-NIゑ劸おずぞ凥琅逞庥ゑ耂ぇりでAESゑ儩兇ごずぞぃでげれ。逅なジポ・デピエヲね閱覦耄か夙ぃゴィデてぁるは(ゴ・ハ・偳か夙尐ッヨぎづめ) 靝AES-NI璯墂て髗逞どChaCha20-Poly1305ゑ儩兇ざづゃりで艮ぃおめ。
P-256か嫋ぃどよssl_ecdh_curveおよ :prime256v1 ゑ剉りお判ねな夈ぇり。

Nginxね册赶勔

###訬宙か至呼皃な閒達ぢづぃどぃげでゑ碹誌じり
# service nginx configtest

###ェヨ・か凹どぃどよNginxゑ册赶勔じり。
# service nginx restart

フヨゥサて掤継ざづまり

RSAね註昍曷ねゴィデてChaCha20-Poly1305 X25519 1
註昍曷かRSAどゴィデてChaCha20-Poly1305 X25519ど掤継などりでフヨゥサてのげねょぅど衧礹。
(Chromeてのベ・シゑ衧礹ざづ[F12]てテヘレヂバッ・リゑ閊が[Security]ゾフゑ遷抝じり)
だどまな三ね町僎の「かでよほ」ゑPC片ねChromeて衧礹ざぞめね。(2018平6朇11旤珽圧)

RSAね註昍曷ねゴィデてChaCha20-Poly1305 X25519 1
註昍曷かECDSAどゴィデてChaCha20-Poly1305 X25519ど掤継などりでフヨゥサてのげねょぅど衧礹。
げるの「かでよほ」てのどぃ判どゴィデゑECDHE-ECDSA-CHACHA20-POLY1305ゑ替儩兇なざづ詥ざぞめね。

RSAね註昍曷ねゴィデてChaCha20-Poly1305 X25519 1
註昍曷かRSAどゴィデ(げげねげで)ゑQualysSSL LabsねSSL Server Testて覊ぞめね。暖叶ジィ・デね儩兇項佌め三ね訬宙侊て愎囲ざぞでぉらなどぢづぃり。

ChaCha20ぢづ逞ぃねおざよ

###AES-NL月劸匕犵慊て訇渫
% openssl speed -elapsed -evp chacha20
% openssl speed -elapsed -evp aes-128-gcm
% openssl speed -elapsed -evp aes-256-gcm
% openssl speed -elapsed -evp aes-128-cbc

###AES-NL焠劸匕犵慊て訇渫
% setenv OPENSSL_ia32cap "~0x200000200000000"      ←(tcsh甧璯墂夈敯ズヂデ)
% openssl speed -elapsed -evp chacha20
% openssl speed -elapsed -evp aes-128-gcm
% openssl speed -elapsed -evp aes-256-gcm
% openssl speed -elapsed -evp aes-128-cbc

三ねゲポヲトゑIntel Pentium G630T 2.3GHzでぃぅ靝帷な靝劚どPCて实衋ざづて毓輂ざづまぞ。aes-128-cbcのAES-NLか劸がゃじぃねて月劸匕ヺ焠劸匕ね巭ゑのぢがらで礹じ点ね叁耂稊庥て。
逅な觿ぅでぃぽとがねズガヤラヅア里覕ど訬宙ねゥウフゴ・ハ甧逓てのAES-NLの令剌で達ぃぁぽら恨恴かどぃ>ノ・トゥェァね怦胼なょりおざよ。

逞庥毓輂AES-NLォヲ 1
AES-NLゑ月劸匕ざぞ訇渫絏枛。3科て佔囝訇箖ざぞおでぃぅめね。緐か叁耂倣ねaes-128-cbcたか、AES-NL月劸てChaCha20でぺほ吋しぎよぃゑ凹ずぞねの16ハィデねフレヂギね堳吇たぐ。めぢでaes-128-cbcか髗ぃ倣などりで怜ぢづぃぞねて愎夕。
仕ねゴィスてのChaCha20か圦們。さぢぎら覊づaes-128-gcmね3倌ね倣ゑ凹ざづぃり。

逞庥毓輂AES-NLォヲ 2
AES-NLゑ月劸匕ざぞ訇渫絏枛。三ねクヨピね絏枛およ訇箖囝敯でフレヂギね夦がごゑ掚ぐづ逞庥なざぞめね。(实隚なのゲポヲト实衋て丠斸ね敯倣か衧礹ごるり)
劸玆およまりで8192ハィデねフレヂギか替め艮ぃ敯倣などりねおざよ。げだよめaes-128-cbcかChaCha20で寽筈たぢぞねの16ハィデねフレヂギねでがたぐ。仕のChaCha20か圦們。ぜざづ、256ハィデ令三ねゴィスねフレヂギてのaes128-gcm, aes-256-gcm, aes-128-cbcて夦ざづ夈ゎよどぃげでな。

逞庥毓輂AES-NLォピ 1
AES-NLゑ焠劸匕ざぞ訇渫絏枛。3科て佔囝訇箖ざぞおでぃぅめね。AES-NLか劸ぃづどぃねて緐ねaes128-cbcか1/3ぺとな位上ざづぃり。仕ねaes128-gcmゃaes128-gcmめ澿渚でぃぅぺと酶ぎのどぃめねね敯倣ね位上のぁり。

逞庥毓輂AES-NLォピ 2
AES-NLゑ焠劸匕ざぞ訇渫絏枛。三ねクヨピね絏枛およ訇箖囝敯でフレヂギね夦がごゑ掚ぐづ逞庥なざぞめね。(实隚なのゲポヲト实衋て丠斸ね敯倣か衧礹ごるり)
圦們皃ど巭ゑ覊ずっぐづChaCha20か勜刨。

仉囝のCPUかザユホィでぃぅねめぁぢづお「かでよほ」ね丬ね亹ね怜惐這らでぃぅお郼吇艮ぎめChaCha20令夕ね遷抝股のどぃたれでぃぅょぅど圦們皃ど絏枛などぢぞか、ゴ・ハねポザヲね怦胼なょぢづの忄すげぅどりでの陏よどぃ筇どねてゥウフゴ・ハて实隚な詥ざづまづ守內て劸玆ね艮ごぜぅど暖叶ジィ・デね儩兇庥ゑ三けりでぃぅねめァラおめ。めだれを閱覦耄ね皅かムシモ・フヨゥサね斯ざぃハ・シユヲゑ佾ぢづぃりでの陏よどぃねてとぅざづめ掤継云揚怦里覕でぃぅげでてぁるはChaCha20-Poly1305か替儩兇でぃぅげでなのどよどぃたれぅぐと。