Jump to content

LibreSSL: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
m Tamersaadeh moved page LibReSSL to LibreSSL over redirect: They have renamed the library again to LibreSSL from LibReSSL. Source: http://www.libressl.org/
 
(446 intermediate revisions by more than 100 users not shown)
Line 1: Line 1:
{{Short description|Open-source implementation of TLS protocols; forked from OpenSSL in 2014}}
{{Use dmy dates|date=April 2014}}
{{Use dmy dates|date=June 2016}}
{{Infobox software
{{Infobox software
| name = LibreSSL
| name = LibReSSL
| logo = LibreSSL logo.png
| logo = LibReSSL_logo_as_of_2014-06-24.png
| logo size =
| logo_size = 250px
| logo alt =
| alt = The word LibReSSL, written in black on a white background, using the font Comic Sans
| logo caption = [[Puffy (mascot)|Puffy]], the mascot of [[OpenBSD]], made to resemble [[Ferdinand II of Aragon|King Ferdinand]]<ref>{{cite web|url=https://www.youtube.com/watch?v=Yg3iPoZzt2Q&t=97|title=LibreSSL, almost Two Years Later |first=Brent |last=Cook|work=InfoSec Southwest|date=2 May 2017|access-date=15 September 2018|publisher=[[YouTube]]}}</ref>
| screenshot =
| screenshot = <!-- Image name is enough -->
| caption =
| screenshot alt =
| latest release version = 2.0.0
| caption =
| latest release date = {{release date|2014|07|11}}
| collapsible =
| developer = The [[OpenBSD]] Project
| author = The [[OpenSSL]] Project
| frequently_updated = in rapid development
| developer = The [[OpenBSD]] Project
| operating_system = OpenBSD
| released = 2.0.0&nbsp;/ {{Start date and age|df=yes|2014|07|11}}
| programming_language = [[C (programming language)|C]], [[Assembly language|assembly]]
| latest release version = {{wikidata|property|preferred|references|edit|Q16590706|P348|P548=Q2804309}}
| genre = [[Library (computer science)|Security library]]
| latest release date = {{wikidata|qualifier|preferred|single|Q16590706|P348|P548=Q2804309|P577}}
| license = [[Apache License]] 1.0, 4-clause [[BSD License]], [[ISC License]], and some are [[public domain]]
| latest preview version = {{wikidata|property|preferred|references|edit|Q16590706|P348|P548=Q51930650}}
| website = http://www.libressl.org
| latest preview date = {{wikidata|qualifier|preferred|single|Q16590706|P348|P548=Q51930650|P577}}
| discontinued =
| programming language = [[C (programming language)|C]], [[assembly language|assembly]], [[Perl]]
| operating system = [[OpenBSD]], [[FreeBSD]], [[NetBSD]], [[Linux]], [[HP-UX]], [[Solaris (operating system)|Solaris]], [[macOS]], [[Windows]] and others<ref>{{cite web|title=LibreSSL Releases|url=http://www.libressl.org/releases.html}}</ref>
| platform =
| size =
| language =
| language count = <!-- Number only -->
| language footnote =
| genre = [[Cryptography]] [[Library (computer science)|library]]
| license = [[Apache License|Apache-1.0]], [[BSD licenses|BSD-4-Clause]], [[ISC license|ISC]], [[public domain]]
| alexa =
| website = {{URL|https://www.libressl.org/}}
| standard =
| AsOf =
}}
}}
'''LibreSSL''' is an [[open-source software|open-source]] implementation of the [[Transport Layer Security]] (TLS) protocol. The implementation is named after [[Secure Sockets Layer]] (SSL), the deprecated predecessor of TLS, for which support was removed in release 2.3.0. The [[OpenBSD]] project [[fork (software)|forked]] LibreSSL from [[OpenSSL]] 1.0.1g in April 2014 as a response to the [[Heartbleed]] security [[vulnerability (computing)|vulnerability]],<ref name=origins>{{cite web |url=http://www.tedunangst.com/flak/post/origins-of-libressl |title=Origins of libressl |first=Ted |last=Unangst |work=flak |date=22 April 2014 |access-date=24 April 2014}}</ref><ref>{{cite web |url=http://www.eweek.com/security/after-heartbleed-openssl-is-forked-into-libressl/ |title=After Heartbleed, OpenSSL Is Forked Into LibreSSL|first=Sean Michael |last=Kerner |work=[[eWeek]] |date=22 April 2014 |access-date=24 April 2014}}</ref><ref>{{cite web|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=[[Slashdot]]|access-date=24 April 2014|date=22 April 2014}}</ref><ref>{{cite web | url=http://it.slashdot.org/story/14/05/17/2250242/30-day-status-update-on-libressl | title=30-Day Status Update On LibreSSL | last=M | first=Constantine | editor=Soulskill | date= 17 May 2014 | publisher=[[Slashdot]] }}</ref> with the goals of modernizing the [[codebase]], improving [[computer security|security]], and applying development [[best practice]]s.<ref name="libressl">{{cite web|title=LibreSSL|url=http://www.libressl.org}}</ref><ref name="zdnet_fork">{{cite web |url=https://www.zdnet.com/article/openbsd-forks-prunes-fixes-openssl/ |title= OpenBSD forks, prunes, fixes OpenSSL |first=Larry |last=Seltzer |work=Zero Day |publisher=[[ZDNet]] |date=21 April 2014 |access-date=21 April 2014}}</ref><ref name="fork">{{cite web |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=[[OpenBSD Journal]] |date=15 April 2014 |access-date=24 April 2014}}</ref>


== History ==
'''LibReSSL''' is an [[open-source]] implementation of the [[Secure Sockets Layer]] (SSL) and [[Transport Layer Security]] (TLS) protocols. It was [[fork (software)|forked]] from the [[OpenSSL]] [[cryptographic]] [[software library]] in April 2014 as a response by [[OpenBSD]] developers to the [[Heartbleed]] [[security vulnerability]] in OpenSSL,<ref name=origins>{{cite web |url=http://www.tedunangst.com/flak/post/origins-of-libressl |title=Origins of libressl |first=Ted |last=Unangst |work=flak |date=22 April 2014 |accessdate=24 April 2014}}</ref><ref>{{cite web |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=[[eWeek]] |date=22 April 2014 |accessdate=24 April 2014}}</ref><ref>{{cite web|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=[[Slashdot]]|accessdate=24 April 2014|date=April 22, 2014}}</ref><ref>{{cite web|first=Bob|last=Beck|title=LibreSSL: The first 30 days, and what the Future Holds Slides|accessdate=17 May 2014|date=17 May 2014|url=http://www.openbsd.org/papers/bsdcan14-libressl/mgp00003.html}}</ref><ref>{{cite web | url=http://it.slashdot.org/story/14/05/17/2250242/30-day-status-update-on-libressl | title=30-Day Status Update On LibreSSL | last=M | first=Constantine | editor=Soulskill | date= 17 May 2014 | publisher=[[Slashdot]] }}</ref> with the aim of [[refactor]]ing the OpenSSL code so as to provide a more secure implementation.<ref name="zdnet_fork">{{cite web |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=[[ZDNet]] |date=21 April 2014 |accessdate=21 April 2014}}</ref>
After the [[Heartbleed]] security [[Vulnerability (computing)|vulnerability]] was discovered in [[OpenSSL]], the [[OpenBSD]] team [[code audit|audited]] the codebase and decided it was necessary to [[fork (software development)|fork]] OpenSSL to remove dangerous code.<ref name=origins/> The libressl.org domain was registered on 11 April 2014; the project announced the name on 22 April 2014. In the first week of development, more than 90,000 lines of C code were removed.<ref name="zdnet_fork" /><ref name=brodkin20140422>{{cite web |url=https://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=[[Ars Technica]] |date=22 April 2014 |access-date=24 April 2014}}</ref> Unused code was removed, and support for obsolete [[operating system]]s ([[Classic Mac OS]], [[NetWare]], [[OS/2]], [[16-bit Windows]]) and some older [[operating system]]s ([[OpenVMS]]) was removed.<ref name="openbsd56">{{cite mailing list |url=https://marc.info/?l=openbsd-announce&m=141486254309079 |title=OpenBSD 5.6 Released |date=1 November 2014 |access-date=28 October 2015 |mailing-list=openbsd-announce |last=Jacoutot |first=Antoine }}</ref>


LibreSSL was initially developed as an intended replacement for OpenSSL in OpenBSD 5.6, and was ported to other platforms once a stripped-down version of the library was stable.<ref name=pcpro>{{cite web |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=[[PC Pro]] |date=22 April 2014 |access-date=23 April 2014 |archive-url=https://web.archive.org/web/20140626092314/http://www.pcpro.co.uk/news/security/388309/heartbleed-libressl-scrubs-irresponsible-openssl-code |archive-date=26 June 2014 |url-status=dead }}</ref> {{As of|2014|04}}, the project was seeking a "stable commitment" of external funding.<ref name=brodkin20140422/> On 17 May 2014, Bob Beck presented "LibreSSL: The First 30 Days, and What The Future Holds" during the 2014 BSDCan conference, in which he described the progress made in the first month.<ref name="30days">{{cite web|first=Bob|last=Beck|title=LibreSSL: The first 30 days, and what the Future Holds Slides|access-date=17 May 2014|date=17 May 2014|url=http://www.openbsd.org/papers/bsdcan14-libressl/mgp00003.html}}</ref> On 5 June 2014, several OpenSSL bugs became public. While several projects were notified in advance,<ref>{{cite mailing list |url=http://seclists.org/oss-sec/2014/q2/466 |title=Re: OpenSSL seven security fixes |date=5 June 2014 |access-date=9 June 2014 |mailing-list=oss-sec}}</ref> LibreSSL was not; [[Theo de Raadt]] accused the OpenSSL developers of intentionally withholding this information from OpenBSD and LibreSSL.<ref>{{cite mailing list |url=https://marc.info/?l=openbsd-misc&m=140199662922801&w=2 |title=Re: new OpenSSL flaws |date=5 June 2014 |access-date=9 June 2014 |mailing-list=openbsd-misc |last=de Raadt |first=Theo |author-link=Theo de Raadt }}</ref>
LibReSSL was forked from the OpenSSL library starting with the 1.0.1g branch and will follow the security guidelines used elsewhere in the OpenBSD project.<ref name="fork">{{cite web |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=[[OpenBSD Journal]] |date=15 April 2014 |accessdate=24 April 2014}}</ref>


On 20 June 2014, [[Google]] created another fork of OpenSSL called [[BoringSSL]], and promised to exchange fixes with LibreSSL.<ref name="imperialviolet">{{cite web|url=https://www.imperialviolet.org/2014/06/20/boringssl.html|title=BoringSSL (20 Jun 2014)|last=Langley|first=Adam|date=20 June 2014|website=Imperialviolet.org|access-date=21 June 2014}}</ref><ref>{{cite web|url=https://arstechnica.com/security/2014/06/google-unveils-independent-fork-of-openssl-called-boringssl/|title=Google unveils independent "fork" of OpenSSL called "BoringSSL"|last=Goodin|first=Dan|date=20 June 2014|access-date=21 June 2014|work=[[Ars Technica]]}}</ref> Google has already [[Software relicensing|relicensed]] some of its contributions under the [[ISC license]], as it was requested by the LibreSSL developers.<ref name="imperialviolet"/><ref>{{cite web|url=https://secure.freshbsd.org/commit/openbsd/ef62f9c8a51b8fb8ce21e1486986f8f3dc7f50a3|title=OpenBSD — lib/libssl/src/crypto/evp evp_aead.c e_chacha20poly1305.c|last=Sing|first=Joel|date=21 June 2014|access-date=21 June 2014|archive-url=https://archive.today/20140622060845/https://secure.freshbsd.org/commit/openbsd/ef62f9c8a51b8fb8ce21e1486986f8f3dc7f50a3|archive-date=22 June 2014|url-status=dead}}</ref> On 21 June 2014, Theo de Raadt welcomed BoringSSL and outlined the plans for LibreSSL-portable.<ref>{{cite mailing list|url=https://marc.info/?l=openbsd-tech&m=140332790726752&w=2 |title=Boringssl and such |date=21 June 2014 |access-date=28 October 2015 |mailing-list=openbsd-tech |last=de Raadt|first=Theo |author-link=Theo de Raadt}}</ref> Starting on 8 July, code porting for [[macOS]] and [[Solaris (operating system)|Solaris]] began,<ref>{{cite web|url=https://secure.freshbsd.org/commit/openbsd/bb95c69c5dea2b7ae53fb1036904c27c038bd2b0|title=OpenBSD - lib/libcrypto/crypto getentropy_osx.c getentropy_solaris.c|date=8 July 2014|last=Beck|first=Bob|access-date=8 July 2014|archive-url=https://web.archive.org/web/20140722094048/https://secure.freshbsd.org/commit/openbsd/bb95c69c5dea2b7ae53fb1036904c27c038bd2b0|archive-date=22 July 2014|url-status=dead}}</ref> while the initial porting to [[Linux]] began on 20 June.<ref>{{cite web|url=https://secure.freshbsd.org/commit/openbsd/1d7eab2186ba0e70b976372401977c2c784ef30a|archive-url=https://archive.today/20140709185108/https://secure.freshbsd.org/commit/openbsd/1d7eab2186ba0e70b976372401977c2c784ef30a|url-status=dead|archive-date=9 July 2014|title=OpenBSD — lib/libcrypto/crypto getentropy_linux.c|date=20 June 2014|last=Beck|first=Bob}}</ref>
== History ==
After the Heartbleed bug in OpenSSL, the OpenBSD team audited the code afresh, and quickly realised they would need to maintain a fork themselves.<ref name=origins/> The libressl.org domain was registered on April 11; the project announced the name on April 22.


As of 2021, OpenBSD uses LibreSSL as the primary TLS library. [[Alpine Linux]] supported LibreSSL as its primary TLS library for three years, until release 3.9.0 in January 2019. [[Gentoo Linux|Gentoo]] supported LibreSSL until February 2021.<ref>{{Cite web|title=LibreSSL languishes on Linux [LWN.net]|url=https://lwn.net/SubscriberLink/841664/0ba4265680b9dadf/|access-date=2021-01-06|website=lwn.net}}</ref> [[Python (programming language)|Python]] 3.10 dropped LibreSSL<ref>{{Cite web|url=https://www.python.org/dev/peps/pep-0644/#libressl-support|title = PEP 644 -- Require OpenSSL 1.1.1 or newer}}</ref> after being supported since Python 3.4.3 (2015).<ref>{{Cite web|url=https://docs.python.org/3.4/whatsnew/changelog.html#python-3-4-3-final|title = Changelog — Python 3.4.10 documentation}}</ref>
In the first week of code pruning, more than 90,000 lines of C code were removed.<ref name="zdnet_fork" /><ref name=brodkin20140422>{{cite web |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=[[Ars Technica]] |date=22 April 2014 |accessdate=24 April 2014}}</ref> Older or unused code has been removed, and support for some older or now-rare operating systems removed. LibReSSL is initially being developed as an intended replacement for OpenSSL in OpenBSD 5.6, and it is then expected to be ported back to other platforms once a stripped-down version of the library is stable.<ref name=pcpro>{{cite web |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=[[PC Pro]] |date=22 April 2014 |accessdate=23 April 2014}}</ref><ref name="will-be-portable">{{cite web |url=http://www.phoronix.com/scan.php?page=news_item&px=MTY4NTc |title=OpenBSD Affirms That LibreSSL Will Be Portable |first=Michael |last=Larabel |work=[[Phoronix]] |date=9 May 2014 |accessdate=30 May 2014}}</ref> {{As of|2014|04}}, the project was seeking a "stable commitment" of external funding.<ref name=brodkin20140422/>


=== Adoption ===
On June 5, 2014, several OpenSSL bugs became public. While several projects were notified in advance,<ref>{{cite web|url=http://seclists.org/oss-sec/2014/q2/466 |title=oss-sec: Re: OpenSSL seven security fixes |publisher=Seclists.org |date= |accessdate=2014-06-09}}</ref> LibReSSL was not; [[Theo de Raadt]] accused the OpenSSL developers of intentionally withholding this information from OpenBSD and LibReSSL.<ref>{{cite web|url=http://marc.info/?l=openbsd-misc&m=140199662922801&w=2 |title='Re: new OpenSSL flaws' - MARC |publisher=Marc.info |date=2014-06-05 |accessdate=2014-06-09}}</ref>
LibreSSL is the default provider of TLS for:
* [[Dragonfly BSD]]<ref>{{Cite web |title=[Beta] Switch base to use private LibreSSL libraries |url=https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/304ca408000cd34559ef5319b4b5a6766d6eb35b |first=John |last=Marino|access-date= 9 November 2018}}</ref>
* [[OpenBSD]]<ref name="openbsd56" />
* [[Hyperbola GNU/Linux-libre]]<ref>{{cite web | url = https://www.hyperbola.info/news/milky-way-v03-release/ | title = Milky Way v0.3 release | access-date = 23 September 2019 | publisher = Hyperbola Project | date = 23 September 2019}}</ref>
*[https://github.com/powershell/Win32-OpenSSH OpenSSH on Windows]


LibreSSL is the default provider of TLS for these now-discontinued systems:
On June 20, 2014, Google created another fork of OpenSSL called [[BoringSSL]], and promised to exchange fixes with LibReSSL.<ref name="imperialviolet">{{cite web|url=https://www.imperialviolet.org/2014/06/20/boringssl.html|title=BoringSSL (20 Jun 2014)|last=Langley|first=Adam|date=20 June 2014|website=ImperialViolet|accessdate=2014-06-21}}</ref><ref>{{cite web|url=http://arstechnica.com/security/2014/06/google-unveils-independent-fork-of-openssl-called-boringssl/|title=Google unveils independent “fork” of OpenSSL called “BoringSSL”|last=Goodin|first=Dan|date=20 June 2014|accessdate=21 June 2014|work=[[Ars Technica]]}}</ref> Google has already relicensed some of its contributions under the ISC license, as it was requested by the LibreSSL developers.<ref name="imperialviolet"/><ref>{{cite web|url=https://secure.freshbsd.org/commit/openbsd/ef62f9c8a51b8fb8ce21e1486986f8f3dc7f50a3|title=OpenBSD — lib/libssl/src/crypto/evp evp_aead.c e_chacha20poly1305.c|last=Sing|first=Joel|date= 21 June 2014|accessdate=21 June 2014}}</ref> On June 21, Theo de Raadt welcomed BoringSSL and outlined the plans for LibReSSL-portable.<ref>{{cite mailing list|url=https://marc.info/?l=openbsd-tech&m=140332790726752&w=2|title=Boringssl and such|date=21 June 2014|last=Raadt|first=Theo de}}</ref> Starting on 8 July, code porting for [[OS X]] and [[Solaris]] began,<ref>{{cite web|url=https://secure.freshbsd.org/commit/openbsd/bb95c69c5dea2b7ae53fb1036904c27c038bd2b0|title=OpenBSD - lib/libcrypto/crypto getentropy_osx.c getentropy_solaris.c|date=8 July 2014|last=Beck|first=Bob}}</ref> while initial porting to [[Linux]] began on 20 June.<ref>{{cite web|url=https://secure.freshbsd.org/commit/openbsd/1d7eab2186ba0e70b976372401977c2c784ef30a|title=OpenBSD — lib/libcrypto/crypto getentropy_linux.c|date=20 June 2014|last=Beck|first=Bob}}</ref>


* [[OpenELEC]]<ref>{{cite web|url=http://openelec.tv/news/22-releases/165-beta-openelec-6-0-beta-2-released|title=OpenELEC Mediacenter - [Beta] OpenELEC 6.0 Beta 2 released|first=Stephan|last=Raue|website=Openelec.tv|access-date=20 August 2015|archive-url=https://web.archive.org/web/20151126061521/http://openelec.tv/news/22-releases/165-beta-openelec-6-0-beta-2-released|archive-date=26 November 2015|url-status=dead}}</ref>
On July 11, 2014, a portable version of LibReSSL was released as version 2.0.0.<ref>{{cite web|url=http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/|title=Index of /pub/OpenBSD/LibreSSL|date=11 July 2014|accessdate=11 July 2014}}</ref><ref>{{cite web|url=http://marc.info/?l=openbsd-tech&m=140510291304119&w=2|title=First release of LibreSSL portable is available|publisher=Marc.info|date=11 July 2014|accessdate=11 July 2014|last=Beck|first=Bob}}</ref>
* [[TrueOS]] packages<ref>{{Cite web |title=PC-BSD Evolves into TrueOS |url=https://www.trueos.org/2016/09/01/pc-bsd-evolves-into-trueos/ |access-date=16 September 2016 |archive-url=https://web.archive.org/web/20160916041238/https://www.trueos.org/2016/09/01/pc-bsd-evolves-into-trueos/ |archive-date=16 September 2016 |url-status=dead }}</ref><ref>{{Cite web |title=PC-BSD 10.1.2: an Interview with Kris Moore |url=http://blog.pcbsd.org/2015/05/pc-bsd-10-1-2-an-interview-with-kris-moore/ |first=Mark |last=VonFange |publisher=Official PC-BSD Blog |access-date= 15 October 2015}}</ref>
LibreSSL is a selectable provider of TLS for:


* [[FreeBSD]] packages<ref>{{Cite web |title=Add DEFAULT_VERSIONS=ssl=XXX|url=https://svnweb.freebsd.org/ports?view=revision&revision=416965|website=Svnweb.freebsd.org}}</ref>
== Changes ==
* [[Gentoo Linux|Gentoo]] packages<ref>{{Cite web|title= Project:LibreSSL - Gentoo|url=https://wiki.gentoo.org/wiki/Project:LibreSSL|website=Wiki.gentoo.org}}</ref> (support dropped as of February 2021<ref>{{Cite web |url=https://www.gentoo.org/support/news-items/2021-01-05-libressl-support-discontinued.html|first=Michał|last=Górny|date=2021-01-05|access-date =2021-03-30|title=LibreSSL support discontinued|website=www.gentoo.org}}</ref><ref>{{Cite web |url=https://bugs.gentoo.org/762847|first=Michał|last=Górny|date=2020-12-31|access-date =2021-03-30|title=Bug 762847 - dev-libs/libressl: Removal|website=bugs.gentoo.org}}</ref><ref>{{Cite web |url=https://archives.gentoo.org/gentoo-dev/message/9a92320c599e63c8c18b2ed29050f22f|first=Michał|last=Górny|date=28 Dec 2020|access-date=2021-03-30|title=[gentoo-dev] [RFC] Discontinuing LibreSSL support?|website=archives.gentoo.org}}</ref>)
* [[OPNsense]] packages <ref>{{Cite web |title=OPNsense version 15.7 Released |url=https://opnsense.org/opnsense-version-15-7-released/ |publisher=OPNsense |access-date=15 October 2015}}</ref> (will be dropped after 22.7<ref>{{Cite web |title=OPNsense version 22.7 Released |url=https://forum.opnsense.org/index.php?topic=29507.0 |publisher=OPNsense |access-date=2022-08-05}}</ref>)
*[[macOS]]


== Changes ==
=== Memory-related ===
=== Memory-related ===
In more detail, some of the more notable and important changes thus far include replacement of custom memory calls to ones in a standard library (for example, <code>[[strlcpy]]</code>, <code>[[calloc]]</code>, <code>[[asprintf]]</code>, <code>[[reallocarray]]</code>, etc.).<ref name="valhalla1wk">{{cite web|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=23 April 2014|accessdate=30 April 2014|last=Orr|first=William}}{{self-published inline|date=May 2014}}</ref><ref name="libsslcallc">{{cite web|url=http://freshbsd.org/search?project=openbsd&q=libssl+calloc|title=OpenBSD LibreSSL CVS Calloc Commits}}</ref> This process may help later on to catch [[buffer overflow]] errors with more advanced [[Memory debugger|memory analysis]] tools or by simply observing program crashes (via [[Address space layout randomization|ASLR]], use of the [[NX bit]], [[stack canary|stack canaries]], etc.).
Changes include replacement of custom memory calls to ones in a [[standard library]] (for example, <code>[[strlcpy]]</code>, <code>[[calloc]]</code>, <code>[[asprintf]]</code>, <code>[[reallocarray]]</code>, etc.).<ref name="valhalla1wk">{{cite web|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=23 April 2014|access-date=30 April 2014|last=Orr|first=William}}</ref>{{self-published inline|date=May 2014}}<ref name="libsslcallc">{{cite web|url=https://secure.freshbsd.org/search?project=openbsd&q=libssl+calloc|title=OpenBSD LibreSSL CVS Calloc Commits|website=Secure.freshbsd.org}}</ref> This process may help later on to catch [[buffer overflow]] errors with more advanced [[Memory debugger|memory analysis]] tools or by observing program crashes (via [[Address space layout randomization|ASLR]], use of the [[NX bit]], [[stack canary|stack canaries]], etc.).


Fixes for potential [[C dynamic memory allocation#Common errors|double free]] scenarios have also been cited in the [[Concurrent Versions System|CVS]] commit logs (including explicit assignments of [[NULL pointer]] values).<ref name="libssldouble">{{cite web|url=http://freshbsd.org/search?project=openbsd&q=libssl+double+free|title=OpenBSD LibreSSL CVS Double Free Commits}}</ref> There have been extra [[sanity check]]s also cited in the commit logs related to ensuring length arguments, unsigned-to-signed variable assignments, pointer values, and method returns.
Fixes for potential [[C dynamic memory allocation#Common errors|double free]] scenarios have also been cited in the [[Version control system|VCS]] commit logs (including explicit assignments of [[null pointer]] values).<ref name="libssldouble">{{cite web|url=https://secure.freshbsd.org/search?project=openbsd&q=libssl+double+free|title=OpenBSD LibreSSL CVS Double Free Commits|website=Secure.freshbsd.org}}</ref> There have been extra [[sanity check]]s also cited in the [[Commit (version control)|commit]] logs related to ensuring length arguments, unsigned-to-signed [[Variable (computer science)|variable]] assignments, [[Pointer (computer programming)|pointer]] values, and method returns.


=== Proactive measures ===
=== Proactive measures ===
In order to maintain good programming practice, a number of compiler options and flags designed for safety have been enabled by default to help in spotting potential issues so they can be fixed earlier (-Wall, -Werror, -Wextra, -Wuninitialized). There have also been code readability updates which help future contributors in verifying program correctness ([[Kernel Normal Form|KNF]], white-space, line-wrapping, etc.). Modification or removal of unneeded method wrappers and macros also help with code readability and auditing (Error and [[I/O abstraction]] library references).
In order to maintain good programming practice, a number of compiler options and flags designed for safety have been enabled by default to help in spotting potential issues so they can be fixed earlier (-Wall, -Werror, -Wextra, -Wuninitialized). There have also been [[code readability]] updates which help future contributors in verifying program correctness ([[Kernel Normal Form|KNF]], white-space, line-wrapping, etc.). Modification or removal of unneeded method wrappers and macros also help with code readability and auditing (Error and [[I/O abstraction]] library references).


Changes were made to ensure that LibReSSL will be [[Year 2038 problem|year 2038 compatible]] along with maintaining portability for other similar platforms. In addition, <code>explicit_bzero</code> and <code>bn_clear</code> calls were added to prevent the compiler from optimizing them out and prevent attackers from reading previously allocated memory.
Changes were made to ensure that LibreSSL will be [[Year 2038 problem|year 2038 compatible]] along with maintaining [[Portability (computer science)|portability]] for other similar platforms. In addition, <code>explicit_bzero</code> and <code>bn_clear</code> calls were added to prevent the compiler from optimizing them out and prevent attackers from reading previously allocated memory.


=== Cryptographic ===
=== Cryptographic ===
There were changes to help ensure proper [[random seed|seeding]] of [[random number generator]]-based methods via replacements of insecure seeding practices (taking advantage of features offered by the kernel itself natively).<ref name="libsslseed">{{cite web|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}}</ref><ref name="libsslseed2">{{cite web|url=http://freshbsd.org/commit/openbsd/58777eed1cff7c5b34cbc026278f730176a6dbc2|title=OpenBSD LibreSSL CVS Kernel Seeding}}</ref> In terms of notable additions made, OpenBSD has added support for newer and more reputable algorithms ([[ChaCha (cipher)|ChaCha]] stream cipher and [[Poly1305]] message authentication code) along with a safer set of [[elliptic curve cryptography|elliptic curve]]s (brainpool curves from RFC5639,<ref>http://tools.ietf.org/html/rfc5639</ref> up to 512 bits in strength).
There were changes to help ensure proper [[random seed|seeding]] of [[random number generator]]-based methods via replacements of insecure seeding practices (taking advantage of features offered by the [[Kernel (operating system)|kernel]] itself natively).<ref name="libsslseed">{{cite web|url=http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libssl/src/crypto/rsa/rsa_crpt.c.diff?r1=1.2&r2=1.3|title=OpenBSD LibreSSL CVS insecure seeding|website=Secure.freshbsd.org}}</ref><ref name="libsslseed2">{{cite web|url=https://secure.freshbsd.org/commit/openbsd/58777eed1cff7c5b34cbc026278f730176a6dbc2|archive-url=https://archive.today/20140916151049/https://secure.freshbsd.org/commit/openbsd/58777eed1cff7c5b34cbc026278f730176a6dbc2|url-status=dead|archive-date=2014-09-16|title=OpenBSD LibreSSL CVS Kernel Seeding|website=Secure.freshbsd.org}}</ref> In terms of notable additions made, OpenBSD has added support for newer and more reputable algorithms ([[ChaCha (cipher)|ChaCha]] stream cipher and [[Poly1305]] message authentication code) along with a safer set of [[elliptic curve cryptography|elliptic curves]] (brainpool curves from RFC 5639, up to 512 bits in strength).

=== Added features ===
The initial release of LibreSSL added a number of features: the [[Salsa20#ChaCha variant|ChaCha]] and [[Poly1305]] algorithm, the [https://tools.ietf.org/html/rfc7027 Brainpool] and [http://www.ssi.gouv.fr/agence/publication/publication-dun-parametrage-de-courbe-elliptique-visant-des-applications-de-passeport-electronique-et-de-ladministration-electronique-francaise/ ANSSI] elliptic curves, and the [[Galois/Counter Mode|AES-GCM]] and [[ChaCha20-Poly1305]] [[Authenticated encryption|AEAD]] modes.

Later versions added the following:<ref name="changelog" />
* 2.1.0: Automatic [[Ephemeral key|ephemeral]] EC keys.<ref name="announce210">{{cite mailing list |url=http://marc.info/?l=openbsd-announce&m=141314415604790 |title=LibreSSL 2.1.0 released |date=12 October 2014 |access-date=28 October 2015 |mailing-list=openbsd-announce |last=Beck |first=Bob }}</ref>
* 2.1.2: Built-in [[RC4#RC4-based random number generators|arc4random]] implementation on macOS and FreeBSD.<ref name="announce212">{{cite mailing list |url=http://marc.info/?l=openbsd-announce&m=141809396501638 |title=LibreSSL 2.1.2 released |date=9 December 2014 |access-date=28 October 2015 |mailing-list=openbsd-announce |last=Beck |first=Bob }}</ref>
* 2.1.2: Reworked [[GOST]] cipher suite support.
* 2.1.3: [[Application-Layer Protocol Negotiation|ALPN]] support.<ref name="announce213">{{cite mailing list |url=http://marc.info/?l=openbsd-announce&m=142193407304782 |title=LibreSSL 2.1.3 released |date=22 January 2015 |access-date=28 October 2015 |mailing-list=openbsd-announce |last=Cook |first=Brent }}</ref>
* 2.1.3: Support for [[SHA-256]] and [[Camellia (cipher)|Camellia]] cipher suites.
* 2.1.4: [[Transport Layer Security#POODLE attack|TLS_FALLBACK_SCSV]] server-side support.<ref name="announce214">{{cite mailing list |url=http://marc.info/?l=openbsd-announce&m=142543818707898 |title=LibreSSL 2.1.4 released |date=4 March 2015 |access-date=28 October 2015 |mailing-list=openbsd-announce |last=Cook |first=Brent }}</ref>
* 2.1.4: certhash as a replacement of the c_rehash script.
* 2.1.4: X509_STORE_load_mem API for loading certificates from memory (enhance chroot support).
* 2.1.4: Experimental [[Microsoft Windows|Windows]] [[binaries]].
* 2.1.5: Minor update mainly for improving Windows support, first working 32- and [[64-bit computing|64-bit]] binaries.<ref name="announce215">{{cite mailing list |url=http://marc.info/?l=openbsd-announce&m=142656309518707 |title=LibreSSL 2.1.5 released |date=17 March 2015 |access-date=28 October 2015 |mailing-list=openbsd-announce |last=Cook |first=Brent }}</ref>
* 2.1.6: {{not a typo|libtls}} declared stable and enabled by default.<ref name="announce216">{{cite mailing list |url=http://marc.info/?l=openbsd-announce&m=142678407219391 |title=LibreSSL 2.1.6 released |date=19 March 2015 |access-date=28 October 2015 |mailing-list=openbsd-announce |last=Cook |first=Brent }}</ref>
* 2.2.0: [[AIX]] and [[Cygwin]] support.<ref name="announce220">{{cite mailing list |url=https://marc.info/?l=openbsd-announce&m=143404058913441 |title=LibreSSL 2.1.7 and 2.2.0 released |date=11 June 2015 |access-date=28 October 2015 |mailing-list=openbsd-announce |last=Cook |first=Brent }}</ref>
* 2.2.1: Addition of EC_curve_nid2nist and EC_curve_nist2nid<ref name="announce221">{{cite mailing list |url=http://marc.info/?l=openbsd-announce&m=143635991232240 |title=LibreSSL 2.2.1 released |date=9 July 2015 |access-date=28 October 2015 |mailing-list=openbsd-announce |last=Cook |first=Brent }}</ref> from OpenSSL, initial [[Windows XP]]/2003 support.
* 2.2.2: Defines LIBRESSL_VERSION_NUMBER,<ref name="announce222">{{cite mailing list |url=http://marc.info/?l=openbsd-announce&m=143882451401333 |title=LibreSSL 2.2.2 released |date=6 August 2015 |access-date=28 October 2015 |mailing-list=openbsd-announce |last=Cook |first=Brent }}</ref> added TLS_*methods as a replacement for the SSLv23_*method calls, [[CMake|cmake]] build support.

=== Old insecure features ===
The initial release of LibreSSL disabled a number of features by default.<ref name="openbsd56" /> Some of the code for these features was later [[#Code removal|removed]], including [[Kerberos (protocol)|Kerberos]], [[Export of cryptography in the United States|US-Export ciphers]], TLS compression, [[OpenSSL#SSL, TLS and DTLS plaintext recovery attack|DTLS heartbeat]], [[SSL v2]] and [[SSL v3]].

Later versions disabled more features:
* 2.1.1: Following the discovery of the [[POODLE]] vulnerability in the legacy [[SSL 3.0]] protocol, LibreSSL now disables the use of SSL 3.0 by default.<ref name="announce211">{{cite mailing list|first= Bob|last= Beck|url= http://marc.info/?l=openbsd-tech&m=141346535617562|title= LibreSSL 2.1.1 released|date= 16 October 2014|mailing-list= openbsd-tech}}</ref>
* 2.1.3: [[GOST|GOST R 34.10-94]] signature authentication.<ref name="changelog">{{cite web | url=https://github.com/libressl-portable/portable/blob/master/ChangeLog | title=LibreSSL-portable ChangeLog | date=15 October 2021 | publisher=LibreSSL}}</ref><ref name="announce213" />
* 2.2.1: Removal of Dynamic Engine and MDC-2DES support<ref name="announce221" />
* 2.2.2: Removal of SSL 3.0 from the openssl binary, removal of [[Internet Explorer]] 6 workarounds, RSAX engine.<ref name="announce222" />
* 2.3.0: Complete removal of SSL 3.0, [[SHA-1#SHA-0|SHA-0]] and [[Datagram Transport Layer Security|DTLS]]1_BAD_VER.


=== Code removal ===
=== Code removal ===
The initial release of LibreSSL has removed a number of features that were deemed insecure, unnecessary or deprecated as part of [[OpenBSD]] 5.6.
One of the initial features removed from LibReSSL in response to [[Heartbleed]] was the heartbeat functionality itself.<ref name="libsslhb">{{cite web|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}}</ref> In addition, there has been removal of unneeded operating systems and hardware architectures ([[Classic Mac OS]], [[NetWare]], [[OS/2]], [[VMS (operating system)|VMS]], [[Microsoft Windows|Windows]], etc.), [[C preprocessor|preprocessor macros]] that have been deemed unnecessary or insecure, and older demo/documentation files for [[Assembly language|Assembly]], [[C (programming language)|C]], and [[Perl]].
* In response to [[Heartbleed]], the heartbeat functionality<ref name="libsslhb">{{cite web|url=http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libssl/src/ssl/d1_both.c.diff?r1=1.6&r2=1.7|title=OpenBSD LibreSSL CVS OPENSSL_NO_HEARTBEATS}}</ref> was one of the first features to be removed.
* Support for obsolete platforms ([[Classic Mac OS]], [[NetWare]], [[OS/2]], [[16-bit Windows]]) were removed.
* Support for some older platforms ([[OpenVMS]]) was removed.
* Support for platforms that do not exist, such as [[big-endian]] [[i386]] and [[amd64]].<ref>{{cite mailing list|url=https://marc.info/?l=openbsd-cvs&m=139776884925793&w=2|title=Remove support for big-endian i386 and amd64|author=Miod Vallat|mailing-list=openbsd-cvs}}</ref>
* Support for old compilers.
* The [[IBM 4758]], Broadcom ubsec, Sureware, Nuron, GOST, GMP, CSwift, CHIL, CAPI, Atalla and AEP engines were removed due to irrelevance of hardware or dependency on [[Non-free software|non-free]] libraries.
* The OpenSSL [[Pseudorandom number generator|PRNG]] was removed (and replaced with [[ChaCha20]]-based implementation of arc4random).
* [[C preprocessor|Preprocessor macros]] that have been deemed unnecessary or insecure or had already been deprecated in OpenSSL for a long time (e.g. des_old.h).
* Older unneeded files for [[assembly language]], [[C (programming language)|C]], and [[Perl]] (e.g. [[/dev/random#EGD as an alternative|EGD]]).
* [[MD2 (cryptography)|MD2]], [[SEED]] functionality.
* SSL 3.0, SHA-0, DTLS1_BAD_VER


The [[Dual_EC_DRBG]] algorithm, which is suspected of having a [[backdoor (computing)|back door]],<ref name="NYT9513">{{cite news|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=9 May 2014|newspaper=The New York Times|date=September 10, 2013}}</ref> was cut along with support for the [[FIPS 140-2]] standard that required it. Unused protocols and insecure algorithms have also been removed, including [[MD2 (cryptography)|MD2]], [[SSL v2]], [[Kerberos (protocol)|Kerberos]], [[Password Authenticated Key Exchange by Juggling|J-PAKE]], and [[Secure Remote Password protocol|SRP]].
The [[Dual EC DRBG]] algorithm, which is suspected of having a [[backdoor (computing)|back door]],<ref name="NYT9513">{{cite news|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/|access-date=9 May 2014|newspaper=The New York Times|date=10 September 2013}}</ref> was cut along with support for the [[FIPS 140-2]] standard that required{{Citation needed|date=December 2021}} it. Unused protocols and insecure algorithms have also been removed, including the support for [[FIPS 140-2]],<ref name="libresslfips">{{cite web | url=http://opensslrampage.org/post/83555615721/the-future-or-lack-thereof-of-libressls-fips | title=The future (or lack thereof) of LibreSSL's FIPS Object Module}}</ref> [[MD4]]/[[MD5]]<ref name="changelog" /> [[Password Authenticated Key Exchange by Juggling|J-PAKE]],<ref name="openbsd56" /> and [[Secure Remote Password protocol|SRP]].<ref name="announce204">{{cite mailing list |url=https://marc.info/?l=openbsd-announce&m=140711256104278 |title=LibreSSL 2.0.4 released |date=3 August 2014 |access-date=28 October 2015 |mailing-list=openbsd-announce |last=Beck |first=Bob }}</ref>


=== Bug backlog ===
=== Bug backlog ===
One of the complaints of OpenSSL was the number of open bugs reported in the bug tracker that had gone unfixed for years. Older bugs are now being fixed in LibReSSL.<ref name="commit log">{{cite web|url=http://marc.info/?l=openbsd-cvs&m=139715677231774&w=2|title= OpenBSD LibreSSL CVS Buffer Release (#2167 bugfix) Commit|date=10 April 2014|accessdate=1 May 2014}}</ref>
One of the complaints of OpenSSL was the number of open [[Software bug|bugs]] reported in the bug tracker that had gone unfixed for years. Older bugs are now being fixed in LibreSSL.<ref name="commit log">{{cite mailing list |url=https://marc.info/?l=openbsd-cvs&m=139715677231774 |title=Re: CVS: cvs.openbsd.org: src |date=10 November 2014 |access-date=28 October 2015 |mailing-list=openbsd-cvs |last=Vallat |first=Miod }}</ref>


== See also ==
== See also ==
{{Portal|Cryptography|Free Software}}
{{Portal|Free Software}}

* [[Comparison of TLS implementations]]
* [[Comparison of TLS implementations]]
* [[Comparison of cryptography libraries]]
* [[OpenSSH]]
* [[OpenSSH]]
* [[POSSE project]]
* [[wolfSSH]]


== References ==
== References ==
{{Reflist|30em}}
{{Reflist}}


== External links ==
== External links ==
* {{Official website|http://www.libressl.org/}}
* {{Official website|//www.libressl.org/}}
* [http://BXR.SU/OpenBSD/lib/libssl/src/ssl/ LibreSSL source code (OpenGrok)]
* [http://BXR.SU/OpenBSD/lib/libssl/ LibreSSL] and [http://bxr.su/o/lib/libtls/ {{not a typo|libtls}} source code (OpenGrok)]
* {{github|libressl-portable|LibreSSL Portable}}
* [http://opensslrampage.org/ OpenSSL Valhalla Rampage] (blog of highlights of the code cleanup)


{{OpenBSD}}
{{OpenBSD}}
{{Cryptographic software}}
{{Cryptographic software}}
{{SSL/TLS}}


[[Category:2014 software]]
[[Category:C (programming language) libraries]]
[[Category:Cryptographic software]]
[[Category:Cryptographic software]]
[[Category:C libraries]]
[[Category:Free security software]]
[[Category:Free security software]]
[[Category:2014 software]]
[[Category:Free software programmed in C]]
[[Category:OpenBSD]]
[[Category:Software forks]]
[[Category:Software forks]]
[[Category:Transport Layer Security implementation]]

Latest revision as of 22:20, 23 November 2024

LibreSSL
Original author(s)The OpenSSL Project
Developer(s)The OpenBSD Project
Initial release2.0.0 / 11 July 2014; 10 years ago (2014-07-11)
Stable release
4.0.0[2] Edit this on Wikidata / 14 October 2024
Preview release3.9.0 (9 March 2024; 8 months ago (2024-03-09)[3][4]) [±]
Repository
Written inC, assembly, Perl
Operating systemOpenBSD, FreeBSD, NetBSD, Linux, HP-UX, Solaris, macOS, Windows and others[5]
TypeCryptography library
LicenseApache-1.0, BSD-4-Clause, ISC, public domain
Websitewww.libressl.org

LibreSSL is an open-source implementation of the Transport Layer Security (TLS) protocol. The implementation is named after Secure Sockets Layer (SSL), the deprecated predecessor of TLS, for which support was removed in release 2.3.0. The OpenBSD project forked LibreSSL from OpenSSL 1.0.1g in April 2014 as a response to the Heartbleed security vulnerability,[6][7][8][9] with the goals of modernizing the codebase, improving security, and applying development best practices.[10][11][12]

History

[edit]

After the Heartbleed security vulnerability was discovered in OpenSSL, the OpenBSD team audited the codebase and decided it was necessary to fork OpenSSL to remove dangerous code.[6] The libressl.org domain was registered on 11 April 2014; the project announced the name on 22 April 2014. In the first week of development, more than 90,000 lines of C code were removed.[11][13] Unused code was removed, and support for obsolete operating systems (Classic Mac OS, NetWare, OS/2, 16-bit Windows) and some older operating systems (OpenVMS) was removed.[14]

LibreSSL was initially developed as an intended replacement for OpenSSL in OpenBSD 5.6, and was ported to other platforms once a stripped-down version of the library was stable.[15] As of April 2014, the project was seeking a "stable commitment" of external funding.[13] On 17 May 2014, Bob Beck presented "LibreSSL: The First 30 Days, and What The Future Holds" during the 2014 BSDCan conference, in which he described the progress made in the first month.[16] On 5 June 2014, several OpenSSL bugs became public. While several projects were notified in advance,[17] LibreSSL was not; Theo de Raadt accused the OpenSSL developers of intentionally withholding this information from OpenBSD and LibreSSL.[18]

On 20 June 2014, Google created another fork of OpenSSL called BoringSSL, and promised to exchange fixes with LibreSSL.[19][20] Google has already relicensed some of its contributions under the ISC license, as it was requested by the LibreSSL developers.[19][21] On 21 June 2014, Theo de Raadt welcomed BoringSSL and outlined the plans for LibreSSL-portable.[22] Starting on 8 July, code porting for macOS and Solaris began,[23] while the initial porting to Linux began on 20 June.[24]

As of 2021, OpenBSD uses LibreSSL as the primary TLS library. Alpine Linux supported LibreSSL as its primary TLS library for three years, until release 3.9.0 in January 2019. Gentoo supported LibreSSL until February 2021.[25] Python 3.10 dropped LibreSSL[26] after being supported since Python 3.4.3 (2015).[27]

Adoption

[edit]

LibreSSL is the default provider of TLS for:

LibreSSL is the default provider of TLS for these now-discontinued systems:

LibreSSL is a selectable provider of TLS for:

Changes

[edit]
[edit]

Changes include replacement of custom memory calls to ones in a standard library (for example, strlcpy, calloc, asprintf, reallocarray, etc.).[40][self-published source?][41] This process may help later on to catch buffer overflow errors with more advanced memory analysis tools or by observing program crashes (via ASLR, use of the NX bit, stack canaries, etc.).

Fixes for potential double free scenarios have also been cited in the VCS commit logs (including explicit assignments of null pointer values).[42] There have been extra sanity checks also cited in the commit logs related to ensuring length arguments, unsigned-to-signed variable assignments, pointer values, and method returns.

Proactive measures

[edit]

In order to maintain good programming practice, a number of compiler options and flags designed for safety have been enabled by default to help in spotting potential issues so they can be fixed earlier (-Wall, -Werror, -Wextra, -Wuninitialized). There have also been code readability updates which help future contributors in verifying program correctness (KNF, white-space, line-wrapping, etc.). Modification or removal of unneeded method wrappers and macros also help with code readability and auditing (Error and I/O abstraction library references).

Changes were made to ensure that LibreSSL will be year 2038 compatible along with maintaining portability for other similar platforms. In addition, explicit_bzero and bn_clear calls were added to prevent the compiler from optimizing them out and prevent attackers from reading previously allocated memory.

Cryptographic

[edit]

There were changes to help ensure proper seeding of random number generator-based methods via replacements of insecure seeding practices (taking advantage of features offered by the kernel itself natively).[43][44] In terms of notable additions made, OpenBSD has added support for newer and more reputable algorithms (ChaCha stream cipher and Poly1305 message authentication code) along with a safer set of elliptic curves (brainpool curves from RFC 5639, up to 512 bits in strength).

Added features

[edit]

The initial release of LibreSSL added a number of features: the ChaCha and Poly1305 algorithm, the Brainpool and ANSSI elliptic curves, and the AES-GCM and ChaCha20-Poly1305 AEAD modes.

Later versions added the following:[45]

  • 2.1.0: Automatic ephemeral EC keys.[46]
  • 2.1.2: Built-in arc4random implementation on macOS and FreeBSD.[47]
  • 2.1.2: Reworked GOST cipher suite support.
  • 2.1.3: ALPN support.[48]
  • 2.1.3: Support for SHA-256 and Camellia cipher suites.
  • 2.1.4: TLS_FALLBACK_SCSV server-side support.[49]
  • 2.1.4: certhash as a replacement of the c_rehash script.
  • 2.1.4: X509_STORE_load_mem API for loading certificates from memory (enhance chroot support).
  • 2.1.4: Experimental Windows binaries.
  • 2.1.5: Minor update mainly for improving Windows support, first working 32- and 64-bit binaries.[50]
  • 2.1.6: libtls declared stable and enabled by default.[51]
  • 2.2.0: AIX and Cygwin support.[52]
  • 2.2.1: Addition of EC_curve_nid2nist and EC_curve_nist2nid[53] from OpenSSL, initial Windows XP/2003 support.
  • 2.2.2: Defines LIBRESSL_VERSION_NUMBER,[54] added TLS_*methods as a replacement for the SSLv23_*method calls, cmake build support.

Old insecure features

[edit]

The initial release of LibreSSL disabled a number of features by default.[14] Some of the code for these features was later removed, including Kerberos, US-Export ciphers, TLS compression, DTLS heartbeat, SSL v2 and SSL v3.

Later versions disabled more features:

  • 2.1.1: Following the discovery of the POODLE vulnerability in the legacy SSL 3.0 protocol, LibreSSL now disables the use of SSL 3.0 by default.[55]
  • 2.1.3: GOST R 34.10-94 signature authentication.[45][48]
  • 2.2.1: Removal of Dynamic Engine and MDC-2DES support[53]
  • 2.2.2: Removal of SSL 3.0 from the openssl binary, removal of Internet Explorer 6 workarounds, RSAX engine.[54]
  • 2.3.0: Complete removal of SSL 3.0, SHA-0 and DTLS1_BAD_VER.

Code removal

[edit]

The initial release of LibreSSL has removed a number of features that were deemed insecure, unnecessary or deprecated as part of OpenBSD 5.6.

  • In response to Heartbleed, the heartbeat functionality[56] was one of the first features to be removed.
  • Support for obsolete platforms (Classic Mac OS, NetWare, OS/2, 16-bit Windows) were removed.
  • Support for some older platforms (OpenVMS) was removed.
  • Support for platforms that do not exist, such as big-endian i386 and amd64.[57]
  • Support for old compilers.
  • The IBM 4758, Broadcom ubsec, Sureware, Nuron, GOST, GMP, CSwift, CHIL, CAPI, Atalla and AEP engines were removed due to irrelevance of hardware or dependency on non-free libraries.
  • The OpenSSL PRNG was removed (and replaced with ChaCha20-based implementation of arc4random).
  • Preprocessor macros that have been deemed unnecessary or insecure or had already been deprecated in OpenSSL for a long time (e.g. des_old.h).
  • Older unneeded files for assembly language, C, and Perl (e.g. EGD).
  • MD2, SEED functionality.
  • SSL 3.0, SHA-0, DTLS1_BAD_VER

The Dual EC DRBG algorithm, which is suspected of having a back door,[58] was cut along with support for the FIPS 140-2 standard that required[citation needed] it. Unused protocols and insecure algorithms have also been removed, including the support for FIPS 140-2,[59] MD4/MD5[45] J-PAKE,[14] and SRP.[60]

Bug backlog

[edit]

One of the complaints of OpenSSL was the number of open bugs reported in the bug tracker that had gone unfixed for years. Older bugs are now being fixed in LibreSSL.[61]

See also

[edit]

References

[edit]
  1. ^ Cook, Brent (2 May 2017). "LibreSSL, almost Two Years Later". InfoSec Southwest. YouTube. Retrieved 15 September 2018.
  2. ^ "LibreSSL 4.0.0 Released". 14 October 2024. Retrieved 15 October 2024.
  3. ^ "LibreSSL". Retrieved 14 March 2024.
  4. ^ "LibreSSL Releases". Retrieved 14 March 2024.
  5. ^ "LibreSSL Releases".
  6. ^ a b Unangst, Ted (22 April 2014). "Origins of libressl". flak. Retrieved 24 April 2014.
  7. ^ Kerner, Sean Michael (22 April 2014). "After Heartbleed, OpenSSL Is Forked Into LibreSSL". eWeek. Retrieved 24 April 2014.
  8. ^ "Not Just a Cleanup Any More: LibreSSL Project Announced". Slashdot. 22 April 2014. Retrieved 24 April 2014.
  9. ^ M, Constantine (17 May 2014). Soulskill (ed.). "30-Day Status Update On LibreSSL". Slashdot.
  10. ^ "LibreSSL".
  11. ^ a b Seltzer, Larry (21 April 2014). "OpenBSD forks, prunes, fixes OpenSSL". Zero Day. ZDNet. Retrieved 21 April 2014.
  12. ^ Hessler, Peter (15 April 2014). "OpenBSD has started a massive strip-down and cleanup of OpenSSL". OpenBSD Journal. Retrieved 24 April 2014.
  13. ^ a b Brodkin, Jon (22 April 2014). "OpenSSL code beyond repair, claims creator of "LibreSSL" fork". Ars Technica. Retrieved 24 April 2014.
  14. ^ a b c d Jacoutot, Antoine (1 November 2014). "OpenBSD 5.6 Released". openbsd-announce (Mailing list). Retrieved 28 October 2015.
  15. ^ McCallion, Jane (22 April 2014). "Heartbleed: LibreSSL scrubs "irresponsible" OpenSSL code". PC Pro. Archived from the original on 26 June 2014. Retrieved 23 April 2014.
  16. ^ Beck, Bob (17 May 2014). "LibreSSL: The first 30 days, and what the Future Holds Slides". Retrieved 17 May 2014.
  17. ^ "Re: OpenSSL seven security fixes". oss-sec (Mailing list). 5 June 2014. Retrieved 9 June 2014.
  18. ^ de Raadt, Theo (5 June 2014). "Re: new OpenSSL flaws". openbsd-misc (Mailing list). Retrieved 9 June 2014.
  19. ^ a b Langley, Adam (20 June 2014). "BoringSSL (20 Jun 2014)". Imperialviolet.org. Retrieved 21 June 2014.
  20. ^ Goodin, Dan (20 June 2014). "Google unveils independent "fork" of OpenSSL called "BoringSSL"". Ars Technica. Retrieved 21 June 2014.
  21. ^ Sing, Joel (21 June 2014). "OpenBSD — lib/libssl/src/crypto/evp evp_aead.c e_chacha20poly1305.c". Archived from the original on 22 June 2014. Retrieved 21 June 2014.
  22. ^ de Raadt, Theo (21 June 2014). "Boringssl and such". openbsd-tech (Mailing list). Retrieved 28 October 2015.
  23. ^ Beck, Bob (8 July 2014). "OpenBSD - lib/libcrypto/crypto getentropy_osx.c getentropy_solaris.c". Archived from the original on 22 July 2014. Retrieved 8 July 2014.
  24. ^ Beck, Bob (20 June 2014). "OpenBSD — lib/libcrypto/crypto getentropy_linux.c". Archived from the original on 9 July 2014.
  25. ^ "LibreSSL languishes on Linux [LWN.net]". lwn.net. Retrieved 6 January 2021.
  26. ^ "PEP 644 -- Require OpenSSL 1.1.1 or newer".
  27. ^ "Changelog — Python 3.4.10 documentation".
  28. ^ Marino, John. "[Beta] Switch base to use private LibreSSL libraries". Retrieved 9 November 2018.
  29. ^ "Milky Way v0.3 release". Hyperbola Project. 23 September 2019. Retrieved 23 September 2019.
  30. ^ Raue, Stephan. "OpenELEC Mediacenter - [Beta] OpenELEC 6.0 Beta 2 released". Openelec.tv. Archived from the original on 26 November 2015. Retrieved 20 August 2015.
  31. ^ "PC-BSD Evolves into TrueOS". Archived from the original on 16 September 2016. Retrieved 16 September 2016.
  32. ^ VonFange, Mark. "PC-BSD 10.1.2: an Interview with Kris Moore". Official PC-BSD Blog. Retrieved 15 October 2015.
  33. ^ "Add DEFAULT_VERSIONS=ssl=XXX". Svnweb.freebsd.org.
  34. ^ "Project:LibreSSL - Gentoo". Wiki.gentoo.org.
  35. ^ Górny, Michał (5 January 2021). "LibreSSL support discontinued". www.gentoo.org. Retrieved 30 March 2021.
  36. ^ Górny, Michał (31 December 2020). "Bug 762847 - dev-libs/libressl: Removal". bugs.gentoo.org. Retrieved 30 March 2021.
  37. ^ Górny, Michał (28 December 2020). "[gentoo-dev] [RFC] Discontinuing LibreSSL support?". archives.gentoo.org. Retrieved 30 March 2021.
  38. ^ "OPNsense version 15.7 Released". OPNsense. Retrieved 15 October 2015.
  39. ^ "OPNsense version 22.7 Released". OPNsense. Retrieved 5 August 2022.
  40. ^ Orr, William (23 April 2014). "A quick recap over the last week". OpenSSL Valhalla Rampage. Retrieved 30 April 2014.
  41. ^ "OpenBSD LibreSSL CVS Calloc Commits". Secure.freshbsd.org.
  42. ^ "OpenBSD LibreSSL CVS Double Free Commits". Secure.freshbsd.org.
  43. ^ "OpenBSD LibreSSL CVS insecure seeding". Secure.freshbsd.org.
  44. ^ "OpenBSD LibreSSL CVS Kernel Seeding". Secure.freshbsd.org. Archived from the original on 16 September 2014.
  45. ^ a b c "LibreSSL-portable ChangeLog". LibreSSL. 15 October 2021.
  46. ^ Beck, Bob (12 October 2014). "LibreSSL 2.1.0 released". openbsd-announce (Mailing list). Retrieved 28 October 2015.
  47. ^ Beck, Bob (9 December 2014). "LibreSSL 2.1.2 released". openbsd-announce (Mailing list). Retrieved 28 October 2015.
  48. ^ a b Cook, Brent (22 January 2015). "LibreSSL 2.1.3 released". openbsd-announce (Mailing list). Retrieved 28 October 2015.
  49. ^ Cook, Brent (4 March 2015). "LibreSSL 2.1.4 released". openbsd-announce (Mailing list). Retrieved 28 October 2015.
  50. ^ Cook, Brent (17 March 2015). "LibreSSL 2.1.5 released". openbsd-announce (Mailing list). Retrieved 28 October 2015.
  51. ^ Cook, Brent (19 March 2015). "LibreSSL 2.1.6 released". openbsd-announce (Mailing list). Retrieved 28 October 2015.
  52. ^ Cook, Brent (11 June 2015). "LibreSSL 2.1.7 and 2.2.0 released". openbsd-announce (Mailing list). Retrieved 28 October 2015.
  53. ^ a b Cook, Brent (9 July 2015). "LibreSSL 2.2.1 released". openbsd-announce (Mailing list). Retrieved 28 October 2015.
  54. ^ a b Cook, Brent (6 August 2015). "LibreSSL 2.2.2 released". openbsd-announce (Mailing list). Retrieved 28 October 2015.
  55. ^ Beck, Bob (16 October 2014). "LibreSSL 2.1.1 released". openbsd-tech (Mailing list).
  56. ^ "OpenBSD LibreSSL CVS OPENSSL_NO_HEARTBEATS".
  57. ^ Miod Vallat. "Remove support for big-endian i386 and amd64". openbsd-cvs (Mailing list).
  58. ^ Perlroth, Nicole (10 September 2013). "Government Announces Steps to Restore Confidence on Encryption Standards". The New York Times. Retrieved 9 May 2014.
  59. ^ "The future (or lack thereof) of LibreSSL's FIPS Object Module".
  60. ^ Beck, Bob (3 August 2014). "LibreSSL 2.0.4 released". openbsd-announce (Mailing list). Retrieved 28 October 2015.
  61. ^ Vallat, Miod (10 November 2014). "Re: CVS: cvs.openbsd.org: src". openbsd-cvs (Mailing list). Retrieved 28 October 2015.
[edit]