Mbed TLS

From Wikipedia, the free encyclopedia
(Redirected from MbedTLS)
Jump to navigation Jump to search
Mbed TLS
DeveloperCollaborative project managed by TrustedFirmware (formerly by Arm)
Initial releaseJanuary 15, 2009 (2009-01-15)
Repository
  • {{URL|example.com|optional display text}}Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
Written inC
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Operating systemMulti-platform
    TypeSecurity library
    LicenseDual Apache-2.0 or GPL-2.0-or-later
    Websitewww.trustedfirmware.org/projects/mbed-tls/

    Mbed TLS (previously PolarSSL) is an implementation of the TLS and SSL protocols and the respective cryptographic algorithms and support code required. It is distributed under the Apache License version 2.0. Stated on the website is that Mbed TLS aims to be "easy to understand, use, integrate and expand".

    History

    [edit | edit source]

    The PolarSSL SSL library is the official continuation fork of the XySSL SSL library. XySSL was created by the French "white hat hacker" Christophe Devine and was first released on November 1, 2006, under GNU GPL v2 and BSD licenses. In 2008, Christophe Devine was no longer able to support XySSL and allowed Paul Bakker to create the official fork, named PolarSSL.[1] In November 2014, PolarSSL was acquired by ARM Holdings.[2]

    In 2011, the Dutch government approved an integration between OpenVPN and PolarSSL, which is named OpenVPN-NL. This version of OpenVPN has been approved for use in protecting government communications up to the level of Restricted.[3]

    As of the release of version 1.3.10, PolarSSL has been rebranded to Mbed TLS to better show its fit inside the Mbed ecosystem.[4] Starting from version 2.1.0, the library was made available under both the GPL v2 and Apache License v2.0.[5]

    In 2020, Mbed TLS joined the TrustedFirmware project.[6]

    Library

    [edit | edit source]

    The core SSL library is written in the C programming language and implements the SSL module, the basic cryptographic functions and provides various utility functions. Unlike OpenSSL and other implementations of TLS, Mbed TLS is like wolfSSL in that it is designed to fit on small embedded devices, with the minimum complete TLS stack requiring under 60KB of program space and under 64 KB of RAM. It is also highly modular: each component, such as a cryptographic function, can be used independently from the rest of the framework. Versions are also available for Microsoft Windows and Linux. Because Mbed TLS is written in the C programming language, without external dependencies, it works on most operating systems and architectures.

    Since version 1.3.0, it has abstraction layers for memory allocation and threading to the core "to support better integration with existing embedded operating systems".[7]

    Design priorities

    [edit | edit source]

    The Mbed TLS library expresses a focus on readability of the code, documentation, automated regression tests, a loosely coupled design and portable code.[8]

    Development documentation

    [edit | edit source]

    The following documentation is available for developers:

    • High Level Design:[9] a high level description of the different modules inside the library, with UML diagrams, use cases and interactions in common scenarios.
    • API documentation:[10] Doxygen-generated documentation from the header files of the library.
    • Source code documentation:[11] The source code of the library is documented to clarify structures, decisions and code constructs.

    Automated testing

    [edit | edit source]

    The automated testing of Mbed TLS includes:

    • A test framework is included with the source code that contains over 5000 automated tests (based on the number of tests in version 1.3.2 of the library) to test for regressions and compatibility on different platforms.
    • A compatibility script (compat.sh[12]) that tests compatibility of SSL communication with OpenSSL and GnuTLS.
    • A continuous integration system based on Travis CI and Jenkins.[13]

    Mbed TLS is used as the SSL component in large open source projects:

    Platforms

    [edit | edit source]

    Mbed TLS is currently available for most Operating Systems including Linux, Microsoft Windows, OS X, OpenWrt, Android, iOS, RISC OS[14] and FreeRTOS. Chipsets supported at least include ARM, x86, PowerPC, MIPS.

    Algorithms

    [edit | edit source]

    Mbed TLS supports a number of different cryptographic algorithms:

    Cryptographic hash functions
    MD2, MD4, MD5, RIPEMD160, SHA-1, SHA-2, SHA-3
    MAC modes
    CMAC, HMAC
    Ciphers
    AES, ARIA, Blowfish, Camellia, ChaCha, DES, RC4, Triple DES, XTEA
    Cipher modes
    ECB, CBC, CFB, CTR, OFB, XTS
    Authenticated encryption modes
    CCM, GCM, NIST Key Wrap,
    ChaCha20-Poly1305
    Key derivation
    HKDF
    Key stretching
    PBKDF2, PKCS #5 PBE2, PKCS #12 key derivation
    Public-key cryptography
    RSA, Diffie–Hellman key exchange,
    Elliptic curve cryptography (ECC), Elliptic curve Diffie–Hellman (ECDH), Elliptic Curve DSA (ECDSA), Elliptic curve J-PAKE

    See also

    [edit | edit source]

    Lua error in mw.title.lua at line 392: bad argument #2 to 'title.new' (unrecognized namespace name 'Portal').

    References

    [edit | edit source]
    1. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    3. ^ [1] Archived January 29, 2013, at the Wayback Machine
    4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    6. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    8. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    9. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    10. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    11. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    12. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    13. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    14. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    [edit | edit source]