java jar包加密编译包是否属公司的机密


什么是 Teaclave Java TEE SDK?
Teaclave Java TEE SDK是一个Java机密计算编程框架。它遵循英特尔-SGX SDK 定义的主机和隔区分区编程模型。Teaclave Java TEE SDK提供了一种优雅的方式来将Java项目划分为主机模块和安全区模块,其中安全区模块是用户定义的服务接口的提供者,类似于Java SPI模型。Teaclave Java TEE
SDK可以帮助你高效开发和构建Java机密计算项目。
为什么我们需要Teaclave Java TEE SDK?
Occlum和Gramine libOS解决方案在安全区内运行整个Java应用程序。虽然它对最终用户来说要容易得多,但它受到大型TCB(可信计算基础)的影响,这可能会在一定程度上损害安全性。另一方面,Intel-SGX 和 OpenEnclave SDK 仅在安全区内运行敏感代码更安全,但它们仅限于 C/C++
生态系统,程序员的开发体验并不友好。例如,它要求程序员提供一个未知的 .edl 文件,该文件定义了主机和安全区之间的接口。而Teaclave Java TEE SDK则为Java机密计算应用程序开发提供了纯Java SDK API。它通过一些简洁的 API 简化了安全环境与不安全环境之间的交互。从用户的角度来看,创建安全区环境和调用机密计算服务就像调用 SPI
服务一样简单。
Teaclave Java TEE SDK 架构
Teaclave Java TEE SDK提供了七个组件:
Teaclave Java TEE SDK Host.jar,提供创建和销毁安全区实例、安全区服务加载和卸载、远程证明报价生成和验证的 API。
Teaclave Java TEE SDK Enclave.jar,使Java原生镜像在sgx enclave环境中运行,并在主机和安全区之间提供一个存根,用于它们的交互。
Teaclave Java TEE SDK Common.jar,为应用程序提供了一个注释,这有助于注册用户定义的接口参数的类型信息以进行本机图像反射。此外,它还定义了主机和安全区之间的接口,用于底层交互,并且对应用程序是透明的。
Teaclave Java TEE SDK,提供各种底层JNI .so和构建工具链。
Teaclave Java TEE SDK Archetype 项目,帮助用户创建一个 Java 机密计算项目结构。
原生BouncyCastle第三方软件包,帮助用户在飞地原生环境中应用BouncyCastle,没有反射问题。
Teaclave Java TEE SDK Docker,为Java机密计算应用程序提供标准的构建和执行环境。
Teaclave Java TEE SDK Architecture
基于Teaclave Java TEE SDK的机密计算Java项目结构
基于Teaclave Java TEE SDK的Java机密计算应用程序项目是一个由三个子模块组成的maven项目,它们是主机子模块,安全区子模块和公共子模块。公共子模块包含服务接口定义,安全区子模块实现公共子模块中定义的接口,主机子模块包含安全区实例和服务实例的管理。我们可以将 enclave 子模块视为 SPI 提供程序,Teaclave Java TEE SDK
将有助于在安全区中运行提供程序,提供程序可以编译为本机映像或 jar 文件。
Teaclave Java TEE SDK Application Dependency
Teaclave Java TEE SDK项目结构
环境准备
1. 是否支持新交所?
apt install cpuid && cpuid -1 -l 0x12
如果不支持SGX2,则只能正常运行Teaclave Java TEE SDK中的MOCK_IN_JVM和MOCK_IN_SVM安全区模式。
2. 是否安装了 SGX2 驱动程序?
cd /dev并检查软链接文件是否存在。
sgx_enclave sgx_provision
如果不是,则需要根据参考:https://github.com/intel/linux-sgx-driver 安装sgx驱动程序。
3. enable_rdfsbase内核模块
如果Linux内核低于5.9,请根据参考 https://github.com/occlum/enable_rdfsbase 安装enable_rdfsbase内核模块。如果使用 Teaclave Java TEE SDK
中定义的模式创建安全区实例EMBEDDED_LIB_OS则需要enable_rdfsbase内核模块。
运行样本/测试/基准测试
1. 进入 Teaclave Java TEE SDK docker
Teaclave Java TEE SDK Docker为基于Teaclave Java TEE SDK的Java机密计算应用程序提供了编译和部署环境。
docker run -it --privileged --network host -v /dev/sgx_enclave:/dev/sgx/enclave -v /dev/sgx_provision:/dev/sgx/provision teaclave/teaclave-java-tee-sdk:v0.1.0-ubuntu18.04
2. 运行示例
cd /opt/javaenclave/samples
运行你好世界:
cd helloworld && ./run.sh
运行弹簧靴:
cd springboot && ./run.sh
3. 运行测试
cd /opt/javaenclave/test && ./run.sh
4. 运行基准测试
cd /opt/javaenclave/benchmark
润国密:
cd guomi && ./run.sh
运行字符串:
cd string && ./run.sh
你好世界演示说明
1. 进入 Teaclave Java TEE SDK docker
docker run -it --privileged --network host -v /dev/sgx_enclave:/dev/sgx/enclave -v /dev/sgx_provision:/dev/sgx/provision teaclave/teaclave-java-tee-sdk:v0.1.0-ubuntu18.04
2. 创建 HelloWorld 项目结构
Teaclave Java TEE SDK提供了一个Java机密计算原型项目,以帮助我们创建一个基本的项目结构。
mvn archetype:generate -DgroupId=com.sample -DartifactId=helloworld -DarchetypeGroupId=org.apache.teaclave.javasdk -DarchetypeArtifactId=javaenclave-archetype -DarchetypeVersion=0.1.0 -DinteractiveMode=false
原型创建一个具有三个子模块、一个主机子模块 enclave 子模块和一个公共子模块的 maven 项目。
3.
在公共子模块中定义安全区服务接口
cd helloworld/common/src/main/java/com/sample/并在此子模块中创建一个通用包。
mkdir -p helloworld/common
然后创建 Service.java 文件以定义安全区服务接口。
package com.sample.helloworld.common;
import org.apache.teaclave.javasdk.common.annotations.EnclaveService;
@EnclaveService
public interface Service {
String sayHelloWorld();
}
请注意,我们必须注释 Teaclave Java TEE SDK 提供的这个服务接口。
@EnclaveService
4. 在安全区子模块中创建安全区服务接口提供程序
cd helloworld/enclave/src/main/java/com/sample/并在此子模块中创建安全区包。
mkdir -p helloworld/enclave
然后创建 ServiceImpl.java 来实现公共包中定义的服务接口。
package com.sample.helloworld.enclave;
import com.sample.helloworld.common.Service;
import com.google.auto.service.AutoService;
@AutoService(Service.class)
public class ServiceImpl implements Service {
@Override
public String sayHelloWorld() {
return "Hello World";
}
}
请注意,我们必须用注释来注释这个类。
@AutoService(Interface. class)
5.
开发主机子模块以创建和调用安全区服务
cd helloworld/host/src/main/java/com/sample/并在此子模块中创建主机包。
mkdir -p helloworld/host
然后创建 Main.java 以显示如何创建和调用安全区服务。
package com.sample.helloworld.host;
import org.apache.teaclave.javasdk.host.Enclave;
import org.apache.teaclave.javasdk.host.EnclaveFactory;
import org.apache.teaclave.javasdk.host.EnclaveType;
import com.sample.helloworld.common.Service;
import java.util.Iterator;
public class Main {
public static void main(String[] args) throws Exception {
EnclaveType[] enclaveTypes = {
EnclaveType.MOCK_IN_JVM,
EnclaveType.MOCK_IN_SVM,
EnclaveType.TEE_SDK,
EnclaveType.EMBEDDED_LIB_OS};
for (EnclaveType enclaveType : enclaveTypes) {
Enclave enclave = EnclaveFactory.create(enclaveType);
Iterator<Service> services = enclave.load(Service.class);
System.out.println(services.next().sayHelloWorld());
enclave.destroy();
}
}
}
6. 构建和运行
cd 回到 HelloWorld 项目顶部目录并构建它: .
mvn -Pnative clean package
请注意,不应忽略参数。
-Pnative
然后我们可以运行此示例:
OCCLUM_RELEASE_ENCLAVE=true java -cp host/target/host-1.0-SNAPSHOT-jar-with-dependencies.jar:enclave/target/enclave-1.0-SNAPSHOT-jar-with-dependencies.jar com.sample.helloworld.host.Main
Teaclave Java TEE SDK 中的四种安全区类型
MOCK_IN_JVM模式
MOCK_IN_JVMTeaclave Java TEE SDK中的模式是模拟模式,它不需要SGX硬件支持。主机模块和安全区模块在同一个 JVM 环境中运行。实质上,它是主机和安全区部件之间的 SPI 机制。
MOCK_IN_SVM模式
MOCK_IN_SVM模式在Teaclave Java TEE SDK中也是一种模拟模式,它不需要SGX硬件支持。与模式相比,安全区子模块将被编译为本机映像,主机子模块在 JVM 环境中运行。主机部分将通过 JNI 本机调用加载、创建和调用在安全区中定义的服务。
MOCK_IN_JVM
TEE_SDK模式
TEE_SDKmode 是一种硬件模式,它必须在支持 SGX2 硬件的平台上运行。与模式相比,安全区子模块也会编译成原生镜像,但它会在 sgx 安全区环境中加载和运行。主机部分将在 JVM 环境中运行,主机和安全区模块将在一个进程中运行。
MOCK_IN_SVM
EMBEDDED_LIB_OS模式
EMBEDDED_LIB_OSmode 也是一种硬件模式,它必须在支持 SGX2 硬件的平台上运行。与模式相比,安全区子模块将被编译成一个jar文件,它将在带有libOS Occlum的飞地中加载和运行,这是一个基于此libOS运行的内部高山JVM。主机部分在另一个基于正常环境的 JVM 中运行。两个 JVM 实例共存并在一个进程中运行。
TEE_SDK
Teaclave Java TEE SDK 配置
请参考链接:Configuration.md

我要回帖

更多关于 java jar包加密 的文章

 

随机推荐