Tink v1.5.0 Release Notes

Release Date: 2020-10-16 // 7 months ago
  • Tink is a multi-language, cross-platform library that provides simple and misuse-proof APIs for common cryptographic tasks.

    This is Tink 1.5.0.

    The complete list of changes since 1.4.0 can be found here.

    What's new

    ๐Ÿ”’ Security fixes

    ๐Ÿš€ This release fixes a ciphertext malleability issue (CVE-2020-8929) in Tink for Java and Android. This is a low severity issue. No loss of confidentiality or loss of plaintext integrity occurs due to this problem, only ciphertext integrity is compromised.

    ๐Ÿ†• New language: Javascript/Typescript

    ๐Ÿš€ This release introduces alpha support for Javascript/Typescript. Check out the HOW-TO and let us know what you think!

    ๐Ÿ†• New primitive: PRF set

    ๐Ÿ“„ The PRF set primitive allows to redact data in a deterministic fashion, for example personal identifiable information or internal IDs, or to come up with a user ID from user information without revealing said information in the ID. This allows someone with access to the output of the PRF without access to the key do some types of analysis, while limiting others.

    ๐Ÿ‘ This primitive is supported in C++, Java, Python and Golang.

    Python

    โž• Added Streaming AEAD. Check out the example for how to encrypt arbitrary large files.

    โž• Added CMAC.

    โž• Added a lot of examples.

    pip3 install tink
    

    C++

    ๐Ÿ“„ We no longer offer prebuilt binaries for C++. Please check out the HOW-TO for compiling your application together with Tink using Bazel or CMake.

    Obj-C

    • โž• Added support for accessGropus to TINKKeysetHandle.

      cd /path/to/your/Xcode project/ pod init pod 'Tink', '1.5.0'pod install

    Golang

    • โž• Added Streaming AEAD with AES-CTR-HMAC.
    • Bundled HCVault with Tink. In 1.4.0, HCVault was offered as a separate module, but we were advised by the Golang's team that it should be bundled with Tink.

      go get github.com/google/tink/go/...

    Java

    • โž• Added AES-GCM-SIV. This requires a Java security provider that supports AES-GCM-SIV such as Conscrypt.

      <dependency> <groupId>com.google.crypto.tink</groupId> <artifactId>tink</artifactId> <version>1.5.0</version> </dependency>

    Android

    • When a call to Android KeyStore failed, Tink will wait a random number of milliseconds (up to 100) before retrying one more time.

      dependencies { implementation 'com.google.crypto.tink:tink-android:1.5.0' }

    Tinkey

    brew tap google/tink https://github.com/google/tink brew install tinkey
    

    ๐Ÿš€ The prebuilt binary attached to this release should also work well on Windows.

    Known issues

    • ๐Ÿ— Tink for Obj-C doesn't build with Bazel. You can still use it in your apps by installing our prebuilt package, as noted above.

Previous changes from v1.4.0

  • Tink is a multi-language, cross-platform library that provides simple and misuse-proof APIs for common cryptographic tasks.

    This is Tink 1.4.0.

    The complete list of changes since 1.3.0 can be found here.

    What's new

    ๐Ÿ”’ Security fixes

    ๐Ÿš€ This release fixes the following potential security issues, affected users are recommended to upgrade.

    Quan Nguyen of Snap Inc. found that AES-CTR-HMAC-AEAD keys and the EncryptThenAuthenticate subtle implementation may be vulnerable to chosen-ciphertext attacks. An attacker can generate ciphertexts that bypass the HMAC verification if and only if all of the following conditions are true:

    • Tink C++ is used on systems where size_t is a 32-bit integer. This is usually the case on 32-bit machines.

    - The attacker can specify long (>= 229 bytes ~ 536MB) associated data.

    Streaming AEAD implementations encrypt the plaintext in segments. Tink uses a 4-byte segment counter. When encrypting a stream consisting of more than 232 segments, the segment counter might overflow and lead to leakage of key material or plaintext. This problem was found in the Java and Go implementations of the AES-GCM-HKDF-Streaming key type.

    Python

    ๐Ÿ‘ This version introduces support for Python 3.7 and 3.8.

    ๐Ÿ‘€ Tink in Python is built on top of C++. It supports all primitives but Streaming AEAD. For an overview, see the HOW-TO. In addition, there are illustrative examples of using Tink in Python which can be used as a jumping off point.

    ๐ŸŽ PyPi binary packages for Linux and macOS are provided.

    pip3 install tink
    

    C++

    Attempt to erase keys from memory after use.

    โž• Adding support for CordAead, which is a more memory-efficient version of Aead that uses absl::Cord.

    ๐Ÿ“š We no longer offer prebuilt binaries for C++. Please check out this documentation for how to compile your application together with Tink using Bazel or CMake.

    Obj-C

    • Removing Obj-C protobufs.

      cd /path/to/your/Xcode project/ pod init pod 'Tink', '1.4.0'pod install

    Golang

    • ๐Ÿ‘ Cleaning up Godoc and adding better examples.

      go get github.com/google/tink/go/...

    Java

    • ๐Ÿ‘ Removing support for Java 7.

      <dependency> <groupId>com.google.crypto.tink</groupId> <artifactId>tink</artifactId> <version>1.4.0</version> </dependency>

    Android

    ๐Ÿ›  Bundling a shaded copy of Google Protobuf. This fixes an annoying version conflict bug.

    Bundling a rule file to ensure compatibility with Proguard/R8.

    โ™ป๏ธ Refactoring Android Keystore integration

    โœ… Running a self-test to only enable the integration if Android Keystore is working properly.

    Do not automatically generate fresh keys if keys exist but are corrupt. This won't recover corrupt keys, but at least it will allow to gather more data on Android Keystore failures.

    dependencies {
      implementation 'com.google.crypto.tink:tink-android:1.4.0'
    }
    

    Tinkey

    ๐ŸŽ Tinkey can now be installed via Homebrew on Linux and macOS.

    brew tap google/tink https://github.com/google/tink brew install tinkey
    

    The binaries can also be downloaded from

    Known issues

    • ๐Ÿ— Tink in Obj-C doesn't build. That is, you can't build it yourself using Bazel. You can still use it in your apps by installing our prebuilt package, as noted above.