{{위키데이터 속성 추적}}
{{소문자}}
{{소프트웨어 정보
| 이름= WolfSSL
| 개발자= Todd Ouska
| 발표일= {{시작 날짜|2006|2|19}}<ref>{{뉴스 인용|url=https://www.wolfssl.com/wolfSSL/Docs-wolfssl-changelog.html|제목=wolfSSL Changelog {{!}} wolfSSL Embedded SSL/TLS Library Documentation|뉴스=wolfSSL|언어=en-US|확인날짜=2018-06-27}}</ref>
| 최근 버전= 3.15.3
| 최근 버전 출시일= 2018년 6월 22일<ref>{{뉴스 인용|url=https://www.wolfssl.com/docs/wolfssl-changelog/|제목=wolfSSL Changelog {{!}} wolfSSL Embedded SSL/TLS Library Documentation|뉴스=wolfSSL|언어=en-US|확인날짜=2018-06-27}}</ref>
| 프로그래밍 언어= [[C (프로그래밍 언어)|C]]
| 종류= [[라이브러리 (컴퓨팅)|보안 라이브러리]]
| 운영체제= 멀티 플랫폼
| 라이선스= [[GNU GPLv2]] 또는 [[상용 라이선스]]<ref name="cryptlib-license">http://www.cryptlib.com/security-faq</ref><ref name="gpl-comp">https://www.gnu.org/licenses/license-list.html#BerkeleyDB</ref>
| 웹사이트= {{URL|wolfssl.com}}
}}

'''wolfSSL''' (이전 이름 '''CyaSSL''')는 임베디드 시스템 개발자의 사용을 타겟으로 한 소형의 휴대성 좋은 내장 SSL / TLS 라이브러리이다. [[C (프로그래밍 언어)|C 언어]] 로 작성된 TLS (SSL 3.0 TLS 1.0, 1.1, 1.2, 1.3, DTLS 1.0, 1.2)의 [[오픈 소스 소프트웨어|오픈 소스]]를 구현한다. SSL / TLS 클라이언트 라이브러리 및 서버 라이브러리를 포함, [[전송 계층 보안|SSL]] 및 [[전송 계층 보안|TLS]]에서 정의 된 다양한 API 외에 지원한다. 또한 [[OpenSSL]]에서 주로 사용되는 함수와 호환<ref name=":0">{{뉴스 인용|url=https://www.wolfssl.com/wolfSSL/Products.html|제목=Embedded Communications Products {{!}} wolfSSL SSL/TLS Library|뉴스=wolfSSL|언어=en-US|확인날짜=2018-06-27}}</ref>의 인터페이스를 제공하고있다.

wolfSSL / CyaSSL의 전신 인 '''yaSSL'''는 임베디드 환경과 자원의 한정된 리얼 타임 OS를 위한 [[C++|C ++]] 로 작성된 SSL 라이브러리이다.

== 플랫폼 ==
wolfSSL는 [[윈도우 API|Win32 / 64]], [[리눅스|Linux]], [[macOS]], [[Solaris]], ThreadX, [[VxWorks]], [[FreeBSD]], [[NetBSD]], [[OpenBSD]], [[임베디드 리눅스|임베디드 Linux]], [[하이쿠 (운영 체제)|Haiku]], [[OpenWrt]], [[iOS|iPhone]], [[Android]], [[Wii|Nintendo Wii]] 및 [[닌텐도 게임큐브|Gamecube]]는 DevKitPro 통하며 [[QNX]],  [[:en:MontaVista|MontaVista]], Tron variants, [[:en:NonStop|NonStop]], [[OpenCL]], Micrium의 [[MicroC/OS-III|MicroC / OS-II]], [[FreeRTOS]], [[FreeRTOS|SafeRTOS]], [[:en:MQX|프리 스케일 MQX]], [[Nucleus RTOS|Nucleus]], [[TinyOS]], [[:en:TI-RTOS|TI-RTOS]], [[HP-UX]], uTasker 및 embOS에서 이용 가능하다.

== 역사 ==
yaSSL의 시작은 2004년으로 거슬러 올라간다. 2004년 당시 OpenSSL 가 가능했고, 그 라이센스는 ''OpenSSL License'' 및 ''SSLeay license''의 듀얼 라이센스<ref>{{웹 인용|url=https://www.openssl.org/source/license.html|제목=/source/license.html|성=Inc.|이름=OpenSSL Foundation,|언어=en|확인날짜=2018-06-27}}</ref>라는 것이 독특한 것이었다. yaSSL은 상용 라이선스와 GPL로 듀얼 라이센스에서 사용할 수 있는 OpenSSL의 대안으로 개발되었다<ref>{{뉴스 인용|url=https://www.wolfssl.com/wolfSSL/License.html|제목=Licensing Information {{!}} wolfSSL Embedded SSL/TLS Library|뉴스=wolfSSL|언어=en-US|확인날짜=2018-06-27}}</ref> . yaSSL는 더 정교한 API 상용 개발의 지원, OpenSSL과의 완벽한 호환성을 제공했다<ref name=":0" />. wolfSSL/CyaSSL/yaSSL의 첫 시작은 [[MySQL]]<ref>{{웹 인용|url=http://dev.mysql.com/doc/refman/5.7/en/building-with-secure-connection-support.html|제목=MySQL :: MySQL 5.7 Reference Manual :: 6.4.5 Building MySQL with Support for Encrypted Connections|언어=en|확인날짜=2018-06-27|보존url=https://web.archive.org/web/20170706085054/https://dev.mysql.com/doc/refman/5.7/en/building-with-secure-connection-support.html|보존날짜=2017-07-06|url-status=dead}}</ref>에서 이용되었다. 이 결과, yaSSL은 MySQL과의 번들링을 통해 수백만 단위의 매우 높은 보급을 실현했다.

== 프로토콜 ==
자세한 내용은 [[전송 계층 보안|Transport Layer Security]]를 참조

wolfSSL는 다음의 다양한 프로토콜을 실현하고있다 :<ref>{{뉴스 인용|url=https://www.wolfssl.com/wolfSSL/Docs-cyassl-manual-4-features.html|제목=wolfSSL User Manual {{!}} Chapter 4: Features {{!}} Documentation|뉴스=wolfSSL|언어=en-US|확인날짜=2018-06-27}}</ref>

·        SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3

·        DTLS 1.0, DTLS 1.2

프로토콜 Notes:

·        SSL 2.0은 RFC 6176 에 의해 2011년 폐지되었다. WolfSSL은 이를 서포트하지 않는다.

·        SSL 3.0은 RFC 7568 에 의해 2015년 폐지되었다. [[:en:POODLE_attack|POODLE 공격]]에 대응하여, SSL 3.0은 wolfSSL 3.3.6 이후 기본적으로 비활성화되었으나, 컴파일 시간 옵션으로 사용될 수 있다.<ref>{{뉴스 인용|url=https://www.wolfssl.com/wolfSSL/Blog/Entries/2015/8/24_wolfSSL_3.6.6_is_Now_Available.html|제목=wolfSSL 3.6.6 is Now Available - wolfSSL|날짜=2015-08-24|뉴스=wolfSSL|언어=en-US|확인날짜=2018-06-27}}</ref>

== 알고리즘  ==
wolfSSL는 다음의 암호화 라이브러리를 사용하고있다 :

=== wolfCrypt ===
기본적으로 wolfSSL 표준에서는 wolfCrypt에서 제공되는 암호화 서비스를 사용한다.<ref>{{뉴스 인용|url=https://www.wolfssl.com/wolfSSL/Docs-wolfssl-manual-10-wolfcrypt-usage-reference.html|제목=wolfSSL User Manual {{!}} Chapter 10: wolfCrypt Usage Reference {{!}} Docs|뉴스=wolfSSL|언어=en-US|확인날짜=2018-06-27}}</ref> wolfCrypt은 [[RSA 암호|RSA]], [[타원곡선 암호|타원 곡선 암호]], [[디지털 서명 알고리즘|DSS]], [[디피-헬먼 키 교환|Diffie Hellman]], [[:en:Error_Detection_and_Handling|EDH]], [[:en:NTRU|NTRU]], [[데이터 암호화 표준|DES]], [[트리플 DES|Triple DES]], [[고급 암호화 표준|AES]] ( CBC, CTR , CCM , GCM ) [[:en:Camellia_(cipher)|Camellia]], [[:en:International_Data_Encryption_Algorithm|IDEA]], [[RC4|ARC4]], [[:en:HC-128|HC-128]], [[:en:ChaCha20|ChaCha20]], [[:en:MD2_(cryptography)|MD2]], [[MD4]], [[MD5]], [[SHA|SHA-1]], [[SHA-2]], [[:en:BLAKE_(hash_function)|BLAKE2]], [[:en:RIPEMD-160|RIPEMD-160]], [[:en:Poly1305|Poly1305]], 난수 생성 , 대규모 정수 연산베이스 16/64 인코딩 / 디코딩을 지원한다. 유럽의 eSTREAM 공용 도메인 스트림 암호 [[:en:Rabbit_(cipher)|Rabbit]] 도 포함되어있다. Rabbit은 고성능, 높은 부하 환경에서의 암호화 스트리밍 미디어에 잠재적으로 유용성이 있다. wolfCrypt는 SSL의 일종을 위해 필요한 기능에 특화하는 한편, 최대한의 이식성을 얻을 수 있도록 배려되어있다.

wolfCrypt는 또한 [[:en:Curve25519|Curve25519]]과 [[:en:EdDSA|Ed25519]]을 지원한다.

wolfCrypt는 MIT Kerberos<ref>{{웹 인용|url=http://web.mit.edu/kerberos/|제목=Kerberos: The Network Authentication Protocol|확인날짜=2018-06-27}}</ref>(빌드 옵션 사용)를 포함하여 몇 가지 소프트웨어 패키지와 라이브러리의 백엔드 암호화 구현으로 활약하고있다.

=== NTRU ===
CyaSSL +에는 NTRU<ref name=":1">{{저널 인용|제목=wolfSSL|url=https://en.wikipedia.org/w/index.php?title=WolfSSL&oldid=847089995|날짜=2018-06-22|언어=en}}</ref> 공개 키 암호화가 포함되어 있다. CyaSSL +에의 NTRU의 추가는 yaSSL과 Security Innovation의 파트너십의 결과였다.<ref name=":1" /> NTRU는 다른 공개 키 암호화와 같은 수준의 보안을 작은 비트 수로 제공하므로 모바일 및 임베디드 환경에서 잘 작동한다. 게다가 TRU 또는quantum attack에 대해서도 취약점이 알려져 있지 않다. TRU를 사용하하는 암호화 세트는 CyaSSL + 을 비롯하여 AES-256, RC4 또는 HC-128 등에서 사용 가능하다.

== SGX ==
wolfSSL는 인텔 SGX (소프트웨어 보호 확장)<ref>{{저널 인용|제목=Software Guard Extensions|url=https://en.wikipedia.org/w/index.php?title=Software_Guard_Extensions&oldid=846767151|날짜=2018-06-20|언어=en}}</ref>을 지원한다. 인텔 SGX는 공격 대상 영역을 줄이고 기존의 코드에서 눈에 띄는 성능 저하 없이 높은 수준의 안전성을 확보하고있다.

== 암호화 하드웨어 가속 지원 ==
<blockquote><big>[http://www.intel.com/content/www/us/en/architecture-and-technology/advanced-encryption-standard--aes-/data-protection-aes-general-technology.html Intel AES-NI] (Xeon 및 Core 프로세서 제품군)</big></blockquote>
{|
|-
|[[고급 암호화 표준|AES]] - [[:en:Galois/Counter_Mode|GCM]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[:en:CCM_mode|CCM]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CBC]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|ECB]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CTR]]
|128, 192, 256 bit
|-
|
|
|}
<blockquote><big>[[:en:Advanced_Vector_Extensions|AVX1 / AVX2]] (Intel 및 AMD x86)</big></blockquote>
{|
|-
|[[SHA-2|SHA-256]]
|-
|[[SHA-2|SHA-384]]
|-
|[[SHA-2|SHA-512]]
|-
|
|}
<blockquote><big>[https://software.intel.com/en-us/blogs/2012/11/17/the-difference-between-rdrand-and-rdseed RDRAND] (Intel 64 IA-32 아키텍처)</big></blockquote>
{|
|-
|[[SHA-2|SHA-256]]
|-
|[[SHA-2|SHA-512]]
|-
|
|}
<blockquote><big>[https://software.intel.com/en-us/blogs/2012/11/17/the-difference-between-rdrand-and-rdseed RDSEED] (Intel Broadwell, AMD Zen)</big></blockquote>
{|
|-
|[[SHA-2|SHA-256]]
|-
|[[SHA-2|SHA-512]]
|-
|
|}
<blockquote><big>[http://www.nxp.com/assets/documents/data/en/application-notes/AN2788.pdf Freescale Coldfire SEC] {{웨이백|url=http://www.nxp.com/assets/documents/data/en/application-notes/AN2788.pdf |date=20170316114001 }} (NXP MCF547X 및 MCF548X)</big></blockquote>
{|
|-
|[[데이터 암호화 표준|DES]] -[[블록 암호 운용 방식|CBC]]
|64 bit
|-
|[[트리플 DES|3DES]] -[[블록 암호 운용 방식|CBC]]
|192 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CBC]]
|128, 192, 256 bit
|-
|
|
|}
<blockquote><big>[http://www.nxp.com/assets/documents/data/en/application-notes/AN4307.pdf Freescale Kinetis MMCAU] {{웨이백|url=http://www.nxp.com/assets/documents/data/en/application-notes/AN4307.pdf |date=20170316114203 }} K50, K60, K70 및 K80 (ARM Cortex-M4 core)</big></blockquote>
{|
|-
|[[MD5]]
|128 bit digest
|-
|[[SHA|SHA1]]
|160 bit digest
|-
|[[SHA-2|SHA256]]
|
|-
|[[데이터 암호화 표준|DES]]-[[블록 암호 운용 방식|CBC]]
|64 bit
|-
|[[트리플 DES|3DES]] -[[블록 암호 운용 방식|CBC]]
|192 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CBC]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[:en:CCM_mode|CCM]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] - [[:en:Galois/Counter_Mode|GCM]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|ECB]]
|128, 192, 256 bit
|-
|
|
|}
<blockquote><big>[[ST마이크로일렉트로닉스|ST 마이크로 일렉트로닉스 STM32]] F1, F2, F4, L1, W 시리즈 (ARM Cortex - M3 / M4)</big></blockquote>
{|
|-
|[[:en:Random_number_generation|RNG]]
|
|-
|[[데이터 암호화 표준|DES]] -[[블록 암호 운용 방식|CBC]]
|64 bit
|-
|[[데이터 암호화 표준|DES]] -[[블록 암호 운용 방식|ECB]]
|64 bit Encrypt
|-
|[[트리플 DES|3DES]] -[[블록 암호 운용 방식|CBC]]
|192 bit
|-
|[[MD5]]
|128 bit
|-
|[[SHA|SHA1]]
|160 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CBC]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CTR]]
|128, 192, 256 bit
|}
<small>[http://www.st.com/en/development-tools/stm32cubemx.html CubeMX] 및 [http://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html?querycriteria=productId=LN1939 Std Per Lib]</small><blockquote><big>[http://cavium.com/processor_security.html Cavium NITROX] (III / V PX 프로세서)</big></blockquote>
{|
|-
|[[:en:Random_number_generation|RNG]]
|
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CBC]]
|128, 192, 256 bit
|-
|[[트리플 DES|3DES]] -[[블록 암호 운용 방식|CBC]]
|192 bit
|-
|[[RC4]]
|2048 bit 최대
|-
|[[:en:Hash-based_message_authentication_code|HMAC]]
|MD5 , SHA1 , SHA256 , SHA3
|-
|[[RSA 암호|RSA]]
|512 - 4096 bit
|-
|[[타원곡선 암호|ECC]]
|NIST Prime 192, 224, 256, 384  and 521
|-
|
|
|}
<blockquote><big>[http://www.microchip.com/design-centers/32-bit Microchip PIC32 MX / MZ] (Embedded Connectivity)</big></blockquote>
{|
|-
|[[MD5]]
|128 bit digest
|-
|[[SHA|SHA1]]
|160 bit digest
|-
|[[SHA-2|SHA256]]
|
|-
|[[:en:Hash-based_message_authentication_code|HMAC]]
|MD5 , SHA1 , SHA256
|-
|[[데이터 암호화 표준|DES]] -[[블록 암호 운용 방식|CBC]]
|64 bit
|-
|[[트리플 DES|3DES]] -[[블록 암호 운용 방식|CBC]]
|192 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CBC]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CTR]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] - [[:en:Galois/Counter_Mode|GCM]]
|128, 192, 256 bit
|-
|
|
|}
<blockquote><big>[http://www.ti.com/product/TM4C1294NCPDT Texas Instruments TM4C1294] (ARM Cortex-M4F)</big></blockquote>
{|
|-
|[[데이터 암호화 표준|DES]] -[[블록 암호 운용 방식|CBC]]
|64 bit
|-
|[[트리플 DES|3DES]] -[[블록 암호 운용 방식|CBC]]
|192 bit
|-
|[[고급 암호화 표준|AES]] -[[:en:CCM_mode|CCM]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] - [[:en:Galois/Counter_Mode|GCM]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|ECB]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CTR]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CBC]]
|128, 192, 256 bit
|-
|
|
|}
<blockquote><big>[https://web.archive.org/web/20180619035750/https://www.nordicsemi.com/Products/nRF51-Series-SoC Nordic NRF51] (Series SoC family 32-bit ARM Cortex M0 processor core)</big></blockquote>
{|
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|ECB]]
|128 bit
|-
|[[:en:Random_number_generation|RNG]]
|
|-
|
|
|}
<blockquote><big>[http://www.microchip.com/wwwproducts/en/ATECC508A Microchip] / [http://www.atmel.com/Images/Atmel-8923S-CryptoAuth-ATECC508A-Datasheet-Summary.pdf Atmel] ATECC508A (MPU 또는 MCU 호환)</big></blockquote>
{|
|-
|[[타원곡선 암호|ECC]]
|256 bit (NIST-P256)
|-
|
|
|}
<blockquote><big>[https://www.arm.com/files/downloads/ARMv8_Architecture.pdf ARMv8] {{웨이백|url=https://www.arm.com/files/downloads/ARMv8_Architecture.pdf |date=20111111161327 }}</big></blockquote>
{|
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CBC]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CTR]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] - [[:en:Galois/Counter_Mode|GCM]]
|128, 192, 256 bit
|-
|[[SHA-2|SHA256]]
|
|-
|
|
|}
<blockquote><big>[https://www.wolfssl.com/docs/intel-quickassist/ Intel QuickAssist 기술]</big></blockquote>
{|
|-
|[[RSA 암호|RSA]]
|512 - 4096 bit
|-
|[[SHA|SHA1]]
|160 bit digest
|-
|[[SHA-2|SHA2]]
|224, 256, 384 and 512 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CBC]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] - [[:en:Galois/Counter_Mode|GCM]]
|128, 192, 256 bit
|-
|[[타원곡선 암호|ECC]]
|Any curve or bit strength
|-
|[[:en:Hash-based_message_authentication_code|HMAC]]
|SHA1 , SHA2
|-
|[[MD5]]
|
|-
|
|
|}
<blockquote><big>[https://www.wolfssl.com/nxp-kinetis-k8x-ltc-support-for-pki-rsaecc-with-tls13/ Freescale NXP LTC]</big></blockquote>
{|
|-
|[[:en:Curve25519|Curve25519]]
|256 bit
|-
|[[:en:EdDSA|Ed25519]]
|256 bit
|-
|[[고급 암호화 표준|AES]] -[[:en:CCM_mode|CCM]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|ECB]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CBC]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] -[[블록 암호 운용 방식|CTR]]
|128, 192, 256 bit
|-
|[[고급 암호화 표준|AES]] - [[:en:Galois/Counter_Mode|GCM]]
|128, 192, 256 bit
|-
|[[SHA|SHA1]]
|160 bit digest
|-
|[[SHA-2|SHA256]]
|
|-
|[[타원곡선 암호|ECC]]
|128, 256 bit
|-
|[[타원곡선 암호|ECC]]-[[디피-헬먼 키 교환|DHE]]
|128, 256 bit
|-
|[[RSA 암호|RSA]]
|512 - 4096 bit
|-
|
|
|}

== 라이센스 ==
wolfSSL는 오픈 소스로, GNU General Public License GPLv2<ref>{{웹 인용|url=https://www.gnu.org/licenses/license-list.html|제목=Various Licenses and Comments about Them|성=|이름=|날짜=|웹사이트=|출판사=|확인날짜=}}</ref>에 상용 라이센스를 받아 이용 가능하다.

== 같이 보기 ==
* [[전송 계층 보안]]
* [[TLS 구현의 비교]]
* [[네트워크 보안 서비스]]
* [[OpenSSL]]
== 각주 ==
{{각주}}

{{암호화 소프트웨어}}

[[분류:C 라이브러리]]
[[분류:암호 소프트웨어]]
[[분류:전송 계층 보안 구현]]