{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name                   = LibreSSL
| 로고                   = LibreSSL_logo_as_of_2014-04-22.png
| logo_size              = 170px
| alt                    = LibreSSL, 검은색 글씨에 흰색 배경, 서체는 Comic Sans
| screenshot             =
| caption                =
| developer              =  [[OpenBSD]] 프로젝트
| released = 2.0.0&nbsp;/ {{시작 날짜와 나이|df=yes|2014|07|11}}
| latest release version = {{wikidata|property|edit|reference|P348|P548=Q2804309}}
| latest release date = {{시작 날짜와 나이|{{wikidata|qualifier|P348|P548=Q2804309|P577}}}}
| latest preview version = {{wikidata|property|preferred|references|edit|P348|P548=Q21727724}}
| latest preview date = 
| operating_system       = OpenBSD
| programming_language   = [[C (프로그래밍 언어)|C]], [[어셈블리어]]
| genre                  = [[라이브러리 (컴퓨팅)|보안 라이브러리]]
| license                = [[아파치 라이선스]] 1.0 및 4-clause [[BSD 허가서|BSD 라이선스]]
| website                = {{URL|https://www.libressl.org}}
}}
'''LibreSSL'''은 [[SSL]]과 [[TLS]] 프로토콜의 [[오픈소스]] 구현판이다. 2014년 4월에 [[OpenBSD]]개발자들이 [[하트블리드]] [[보안취약점]]에 대응하기 위해, [[OpenSSL]] [[암호학]] [[소프트웨어 라이브러리]]의 코드를 [[리팩토링]]해 더 안전한 구현을 만들기 위해 OpenSSL로부터 [[포크 (소프트웨어 개발)|포크]]했다.<ref name=origins>{{웹 인용 |url=http://www.tedunangst.com/flak/post/origins-of-libressl |title=Origins of libressl |first=Ted |last=Unangst |work=flak |date=2014년 4월 22일 |accessdate=2014년 4월 24일 |보존url=https://web.archive.org/web/20140424125844/http://www.tedunangst.com/flak/post/origins-of-libressl |보존날짜=2014년 4월 24일 |url-status=dead }}</ref><ref>{{웹 인용 |url=http://www.eweek.com/security/after-heartbleed-openssl-is-forked-into-libressl.html |title=After Heartbleed, OpenSSL Is Forked Into LibreSSL |first=Sean Michael |last=Kemer |work=[[:en:eWeek]] |date=2014년 4월 22일 |accessdate=2014년 4월 24일 }}{{깨진 링크|url=http://www.eweek.com/security/after-heartbleed-openssl-is-forked-into-libressl.html }}</ref><ref>{{웹 인용|title=Not Just a Cleanup Any More: LibreSSL Project Announced|url=http://it.slashdot.org/story/14/04/22/1240247/not-just-a-cleanup-any-more-libressl-project-announced|publisher=[[:en:Slashdot]]|accessdate=2014년 4월 24일|date=2014년 4월 22일|보존url=https://web.archive.org/web/20140424142257/http://it.slashdot.org/story/14/04/22/1240247/not-just-a-cleanup-any-more-libressl-project-announced|보존날짜=2014년 4월 24일|url-status=dead}}</ref>

LibreSSL OpenSSL의 1.0.1g 브랜치로부터 포크되었으며 OpenBSD 프로젝트의 보안 가이드라인을 따른다.<ref name="fork">{{웹 인용|url=http://www.undeadly.org/cgi?action=article&sid=20140415093252 |title=OpenBSD has started a massive strip-down and cleanup of OpenSSL |first=Peter |last=Hessler |work=[[:en:OpenBSD Journal]] |date= 2014년 4월 15일 |accessdate= 2014년 4월 24일}}</ref>

== 역사 ==
OpenSSL에서 하트블리드 버그가 발견된 다음, OpenBSD팀은 코드를 새로이 검토하였으며, 포크한 코드를 스스로 유지 보수 해야함을 알게되었다.<ref name=origins/> libressl.org 도메인은 4월 11일에 등록됐으며 프로젝트는 4월 22일에 발표됐다.

코드 가지치기의 첫 번째 주에서, 90,000줄 이상의 C코드들이 제거되었다.<ref>{{웹 인용|url=http://www.zdnet.com/openbsd-forks-prunes-fixes-openssl-7000028613/ |title= OpenBSD forks, prunes, fixes OpenSSL |first=Larry |last=Seltzer |work=Zero Day |publisher=[[:en:ZDNet]] |date= 2014년 4월 21일 |accessdate= 2014년 4월 21일}}</ref><ref name=brodkin20140422>{{웹 인용|url=http://arstechnica.com/information-technology/2014/04/openssl-code-beyond-repair-claims-creator-of-libressl-fork/ |title=OpenSSL code beyond repair, claims creator of "LibreSSL" fork |first=Jon |last=Brodkin |work=[[:en:Ars Technica]] |date= 2014년 4월 22일 |accessdate= 2014년 4월 24일}}</ref> 오래되거나 쓰이지 않는 코드들과 몇몇 오래되고 지금은 잘 쓰이지 않는 운영체제 지원 코드들은 제거되었다. LibreSSL은 초기 OpenSSL을 OpenBSD 5.6버전에서 제거하기 위해 개발되었으나, 코드 제거작업된 라이브러리가 안정이 되면 다른 플랫폼으로 다시 포팅될 것으로 기대되고 있다.<ref name=pcpro>{{웹 인용 |url=http://www.pcpro.co.uk/news/security/388309/heartbleed-libressl-scrubs-irresponsible-openssl-code |title=Heartbleed: LibreSSL scrubs "irresponsible" OpenSSL code |first=Jane |last=McCallion |work=[[:en:PC Pro]] |date=2014년 4월 22일 |accessdate=2014년 4월 23일 |보존url=https://web.archive.org/web/20140626092314/http://www.pcpro.co.uk/news/security/388309/heartbleed-libressl-scrubs-irresponsible-openssl-code |보존날짜=2014년 6월 26일 |url-status=dead }}</ref> {{As of|2014|04}}, 프로젝트는 현재 안정적인 외부 자금 기부자를 찾고 있다.<ref name=brodkin20140422/>

== 변화 ==

=== 메모리 관련 ===
더 자세히 들어가면, 지금까지의 일부 눈에띄고 중요한 변화 중에는 커스텀 메모리 호출을 표준 라이브러리로 바꾼것이다(예를 들어 [[:en:strlcpy]], [[:en:calloc]], [[:en:asprintf]], [[:en:reallocarry]], 등).<ref name="valhalla1wk">{{웹 인용|url=http://opensslrampage.org/post/83631316689/a-quick-recap-over-the-last-week|work=OpenSSL Valhalla Rampage|title=A quick recap over the last week|date=2014년 4월 23일|accessdate=2014년 4월 30일|last=Orr|first=William|보존url=https://web.archive.org/web/20140429135152/http://opensslrampage.org/post/83631316689/a-quick-recap-over-the-last-week|보존날짜=2014년 4월 29일|url-status=dead}}</ref><ref name="libsslcallc">{{웹 인용|url=http://freshbsd.org/search?project=openbsd&q=libssl+calloc|title=OpenBSD LibreSSL CVS Calloc Commits|확인날짜=2014-05-15|보존url=https://web.archive.org/web/20190217011929/http://freshbsd.org/search?project=openbsd&q=libssl+calloc|보존날짜=2019-02-17|url-status=dead}}</ref>
이 절차는 나중에 더 나은 메모리 [[디버거]]를 사용하거나 프로그램 오류 발생을 관찰([[주소 공간 배치 난수화]](ASLR), [[NX 비트]], Stack Canary 등을 통해) [[버퍼 오버플로]]에러를 수정하는데 도움을 줄 수도 있다.

잠재적인 Double Free(C 동적 메모리 할당에러) 해결은 [[CVS]] 커밋 로그(명시적 [[널 포인터]] 변수 할당 포함)<ref name="libssldouble">{{웹 인용|url=http://freshbsd.org/search?project=openbsd&q=libssl+double+free|title=OpenBSD LibreSSL CVS Double Free Commits|확인날짜=2014-05-15|보존url=https://web.archive.org/web/20190217011930/http://freshbsd.org/search?project=openbsd&q=libssl+double+free|보존날짜=2019-02-17|url-status=dead}}</ref>에 언급되어 있다. 또한 인자 길이, 부호없는 변수를 부호화된 변수에 할당, 포인터 변수, 함수의 반환 값의 보장과 관련된 Sanity 검사또한 커밋 로그에 언급되어 있다.

=== 사전 방지책 ===
좋은 프로그래밍 결과를 유지하기 위해 안전을 위해 디자인된 많은 컴파일러 옵션과 플래그들이 잠재적인 문제를 감지해 더 빨리 오류를 고치기 위해 기본적으로 활성화되어 있다(-Wall, -Werror, -Wextra, -Wuninitialized). 차후 공헌자들의 프로그램 검수를 돕기 위해 코드의 가독성 업데이트 또한 포함되어 있다(Kernel Normal Form, 공백, 라인 감싸기 등). 불필요한 메소드 감싸개와 매크로의 수정 또한 코드 가독성과 검사에 도움을 주고 있다(에러와 I/O추상화 라이브러리 레퍼런스).

LibreSSL은 [[2038년 문제|2038년]]에 호환성을 갖추고 코드가 비슷한 플랫폼에 이식성을 갖도록 변화하였다.

=== 암호학 ===
불안정한 시드입력 절차를 바꿈으로써 난수생성기기반의 메소드의 [[난수#의사난수 생성 방법|난수조건]]을 적절하게 만드는 변화가 있었다(커널이 자체 제공하는 기능을 사용하였다).<ref name="libsslseed">{{웹 인용|url=http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libssl/src/crypto/rsa/rsa_crpt.c.diff?r1=1.2;r2=1.3;f=h|title=OpenBSD LibreSSL CVS Insecure Seeding}}{{깨진 링크|url=http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libssl/src/crypto/rsa/rsa_crpt.c.diff?r1=1.2;r2=1.3;f=h }}</ref><ref name="libsslseed2">{{웹 인용|url=http://freshbsd.org/commit/openbsd/58777eed1cff7c5b34cbc026278f730176a6dbc2|title=OpenBSD LibreSSL CVS Kernel Seeding|확인날짜=2014-05-15|보존url=https://web.archive.org/web/20140816130747/http://freshbsd.org/commit/openbsd/58777eed1cff7c5b34cbc026278f730176a6dbc2|보존날짜=2014-08-16|url-status=dead}}</ref> 주목할만한 추가라는 측면에서, OpenBSD는 새로운 그리고 더 훌륭한 알고리즘(ChaCha 스트림 암호화와 Poly1305-AES 메시지 인증코드)과 함께 더 안전한 [[타원곡선]]셋(Brainpool 곡선 [http://tools.ietf.org/html/rfc5639 RFC5639], 최고 512bit 강도) 지원을 추가했다.

=== 코드제거 ===
[[하트블리드]]에 대응하기 위해 초기에 LibreSSL에서 제거된 특징중 하나는 heartbeat 기능이었다.<ref name="libsslhb">{{웹 인용|url=http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libssl/src/ssl/d1_both.c.diff?r1=1.6;r2=1.7;f=h|title=OpenBSD LibreSSL CVS OPENSSL_NO_HEARTBEAT}}{{깨진 링크|url=http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libssl/src/ssl/d1_both.c.diff?r1=1.6;r2=1.7;f=h }}</ref> 게다가 필요하지 않은 운영체제와 하드웨어 아키텍처 지원([[맥 OS]], [[넷웨어]], [[OS/2]], [[OpenVMS|VMS]], [[마이크로소프트 윈도우|윈도우]] 등), 불필요하거나 안전하지 못하다고 여겨진 [[C 언어 전처리기|전처리기 매크로]], [[어셈블리어]], [[C 언어]], [[Perl]]과 같이 오래된 데모와 문서파일들 또한 제거되었다.

백도어를 가졌다고 의심되어온 Dual_EC_DRBG알고리즘<ref name="NYT9513">{{뉴스 인용|first=Nicole |last=Perlroth |title=Government Announces Steps to Restore Confidence on Encryption Standards|url=http://bits.blogs.nytimes.com/2013/09/10/government-announces-steps-to-restore-confidence-on-encryption-standards/|accessdate= 2014년 5월 9일|newspaper=The New York Times|date= 2013년 9월 10일}}</ref>또한 [[:en:Federal Information Processing Standards|FIPS]]표준안이 요구함에 따라 제거되었다. 쓰이지 않는 통신규약 및 불안전한 알고리즘([[:en:MD2 (cryptography)|MD2]], [[:en:SSL v2]], [[커베로스]], [[:en:Password Authenticated Key Exchange by Juggling|J-PAKE]], [[:en:Secure Remote Password protocol|SRP]]) 또한 제거되었다.

=== 남아있는 버그 ===
OpenSSL의 해결되지 못한 불만 중 하나는 버그 트래커에 있는 알려진 버그들이 갑자기 주목되지 않는 곳으로 사라지거나 몇년동안 무시되는 것이었다. 오래된 버그들은 현재 LibreSSL에서 해결되는 중이다.<ref name="commit log">{{웹 인용|url= http://marc.info/?l=openbsd-cvs&m=139715677231774&w=2|title= OpenBSD LibreSSL CVS Buffer Release (#2167 bugfix) Commit|date= 2014년 4월 10일|accessdate= 2014년 5월 1일|보존url= https://web.archive.org/web/20150417212759/http://marc.info/?l=openbsd-cvs|보존날짜= 2015년 4월 17일|url-status= dead}}</ref>

== 같이 보기 ==
* [[TLS 구현의 비교]]
* [[POSSE 프로젝트]]
* [[오픈SSH]]: OpenBSD 커뮤니티에 의해 포크된 또 다른 보안 소프트웨어

== 각주 ==
{{각주}}

== 외부 링크 ==
* {{공식 웹사이트}}
* [https://web.archive.org/web/20140424095911/http://bxr.su/OpenBSD/lib/libssl/src/ssl/ LibreSSL source code (OpenGrok)]
* [https://web.archive.org/web/20140531124552/http://opensslrampage.org/ OpenSSL Valhalla Rampage] (blog of highlights of the code cleanup)

{{OpenBSD}}
{{암호화 소프트웨어}}
{{TLS/SSL}}

[[분류:암호 소프트웨어]]
[[분류:C 라이브러리]]
[[분류:OpenBSD]]
[[분류:2014년 소프트웨어]]
[[분류:자유 보안 소프트웨어]]
[[분류:C로 작성된 자유 소프트웨어]]
[[분류:소프트웨어 포크]]
[[분류:전송 계층 보안 구현]]