标签: post-quantum-cryptography

如何用自定义 SPI 替换核心类/功能?

我正在尝试通过自定义 SPI 添加一些后量子密钥算法(来自 liboqs-java)到 Keycloak。我可以使用我添加的算法生成密钥,但在操作它们时遇到了一些问题。

Keycloak 在使用我的新算法处理密钥时遇到问题...我认为 Java BouncyCastle 无法识别后量子算法(例如 Dilithium2),并且会导致系统崩溃。

我在 BCPemUtilsProvider Keycloak 类上的 JcaPEMWriter BouncyCastle 类上遇到了具体问题。我的解决方案是重写 BCPemUtilsProvider,这样我就可以替换 BouncyCastle 函数,但是为了做到这一点,我需要从 Keycloak 更改核心文件并重新编译整个项目,这对于每个微小的更改都需要花费大量时间。

我想通过 SPI(如果可能)或一些轻量级解决方案来解决这个问题,这样我就可以在实际的时间内进行测试。有没有办法在不重新编译整个 Keycloak 的情况下更改核心功能(或者,也许是我没有看到的另一种解决方案)?

提前致谢!!

顺便说一句,这是密钥生成的代码:

public AbstractGeneratedDLSecretKeyProvider(ComponentModel model, KeyUse use, String type, String algorithm) {
        this.status = KeyStatus.from(model.get(Attributes.ACTIVE_KEY, true), model.get(Attributes.ENABLED_KEY, true));
        this.kid = model.get(Attributes.KID_KEY);
        this.model = model;
        this.use = use;
        this.type = type;
        this.algorithm = algorithm;

        if (model.hasNote(PrivateKey.class.getName()) && model.hasNote(PublicKey.class.getName())) {
            privateKey = model.getNote(PrivateKey.class.getName());
            publicKey = model.getNote(PublicKey.class.getName());
        } else {
            Signature signer = new Signature("Dilithium2");

            signer.generate_keypair(); …
Run Code Online (Sandbox Code Playgroud)

java cryptography bouncycastle keycloak post-quantum-cryptography

5
推荐指数
1
解决办法
333
查看次数

这样一个复杂的函数来测试变量是否不为零有什么好处?

我正在撰写关于为后量子安全签名编写的代码的硕士论文(计算机科学)。整个事情都可以在这里找到但在这里并不重要。在我的论文中,我试图解释一个“简单”的函数,它根本不是那么简单。

该函数测试,如果一个变量在GF(16) 中是非零的。(这里的GF(16)可以理解为4位无符号整数)。该函数如下所示:

static inline uint8_t gf16_is_nonzero(uint8_t a) {
    unsigned a4 = a & 0xf; // mask lowest 4 bits of a
    unsigned r = 0u - a4;  // set 4 high bits if a is nonzero
    r >>= 4;               // right-shift high bits into low bits
    return r & 1;          // return lowest bit
}
Run Code Online (Sandbox Code Playgroud)

我明白它是如何工作的,但我不明白为什么这个功能需要这么复杂。这有什么好的理由吗?很好的理由可能是性能或安全性(例如针对定时攻击的安全性)的好处。因为如果没有这样的好处,那么以简单的方式编写该函数不是更聪明,例如:

static inline uint8_t gf16_is_nonzero(uint8_t a) {
    return (a & 15) != 0;
} …
Run Code Online (Sandbox Code Playgroud)

c performance bit-manipulation galois-field post-quantum-cryptography

4
推荐指数
1
解决办法
128
查看次数

使用 BouncyCastle Java 实现 CRYSTALS-Kyber

任何人都可以帮助引导我走向正确的方向,甚至只是使用 Kyber 生成密钥对吗?我尝试搜索 BouncyCastle 示例,但找不到任何可以启动的示例。

我正在尝试对一些当前的算法进行基准测试,例如 AES/RSA,这些算法我工作得很好,但即使在 Kyber 上开始使用,我也无法取得任何进展。任何帮助将不胜感激。

我尝试在 Google 上搜索示例,开发人员在其网站上实现了 C# 甚至 Java,但没有 BouncyCastle。他们提到它可以在 BouncyCastle 上使用,但我找不到任何文档,甚至无法帮助实现它。

java cryptography bouncycastle post-quantum-cryptography

1
推荐指数
1
解决办法
1450
查看次数