secretflow/heu

增加secret_key构建hekit接口

tarantula-leo opened this issue · 8 comments

目前可从公钥构造destinationhekit,得到evaluator、encryptor,但在仅有sk场景下(实际使用中只会对sk/pk进行序列化,不会对hekit做序列化),无法构造hekit对密文进行解密;
可类似地提供如下接口:

setup(public_key: heu.heu.phe.SecretKey) -> heu.heu.phe.xxxHeKit
# Setup phe environment by an already generated secret key.
decryptor(self: [heu.heu.phe.xxxHeKit] → heu::lib::phe::Decryptor
# Get decryptor

好的,我们加一个从 sk 恢复 HeKit 的接口

  1. 增加完成是否可以提供wheel包下载/pip更新?
  2. pk_buffer的接口在python中是否未开放:
DestinationHeKit::DestinationHeKit(std::shared_ptr<PublicKey> pk) {
  Setup(std::move(pk));
  public_key_->Visit(HE_DISPATCH(HE_SPECIAL_SETUP_BY_PK));
}

DestinationHeKit::DestinationHeKit(yacl::ByteContainerView pk_buffer) {
  auto pk = std::make_shared<PublicKey>();
  pk->Deserialize(pk_buffer);
  Setup(std::move(pk));
  public_key_->Visit(HE_DISPATCH(HE_SPECIAL_SETUP_BY_PK));
}

}  // namespace heu::lib::phe
  1. 增加完成是否可以提供wheel包下载/pip更新?
  2. pk_buffer的接口在python中是否未开放:
  1. 会提供
  2. Python 中直接 kit = phe.setup(pickle.loads(pk_buffer))

DestinationHeKit::DestinationHeKit(yacl::ByteContainerView pk_buffer)
这个接口是在哪里会调用的?

@tarantula-leo 这个是开放给 C++ 应用的接口,如果是 Python 侧过来的请求不会用到这个接口

看merge的内容,是通过pk和sk恢复Hekit,如果对于Decryptor的单独使用,是不是只需要sk就可以?是否会考虑增加一个单独的HeKit类,类似DestinationHekit供Encryptor/Evaluator使用。

看merge的内容,是通过pk和sk恢复Hekit,如果对于Decryptor的单独使用,是不是只需要sk就可以?是否会考虑增加一个单独的HeKit类,类似DestinationHekit供Encryptor/Evaluator使用。

这个不考虑,有些算法的 decrypt 依赖 pk 中的内容,所以 HEU 构造 Decryptor 的时候默认需要传入 pk 和 sk,上层多传一个 pk 应该不困难吧?