Tenseal เป็นห้องสมุดสำหรับการดำเนินการเข้ารหัส homomorphic บนเทนเซอร์ที่สร้างขึ้นบน Microsoft Seal มันให้ความสะดวกในการใช้งานผ่าน Python API ในขณะที่รักษาประสิทธิภาพโดยการใช้งานส่วนใหญ่โดยใช้ C ++
tenseal.sealapi เราแสดงการดำเนินการพื้นฐานผ่านข้อมูลที่เข้ารหัสการใช้งานขั้นสูงสำหรับแอปพลิเคชันการเรียนรู้ของเครื่องสามารถพบได้ในส่วนการสอนของเรา
import tenseal as ts
# Setup TenSEAL context
context = ts . context (
ts . SCHEME_TYPE . CKKS ,
poly_modulus_degree = 8192 ,
coeff_mod_bit_sizes = [ 60 , 40 , 40 , 60 ]
)
context . generate_galois_keys ()
context . global_scale = 2 ** 40
v1 = [ 0 , 1 , 2 , 3 , 4 ]
v2 = [ 4 , 3 , 2 , 1 , 0 ]
# encrypted vectors
enc_v1 = ts . ckks_vector ( context , v1 )
enc_v2 = ts . ckks_vector ( context , v2 )
result = enc_v1 + enc_v2
result . decrypt () # ~ [4, 4, 4, 4, 4]
result = enc_v1 . dot ( enc_v2 )
result . decrypt () # ~ [10]
matrix = [
[ 73 , 0.5 , 8 ],
[ 81 , - 5 , 66 ],
[ - 100 , - 78 , - 2 ],
[ 0 , 9 , 17 ],
[ 69 , 11 , 10 ],
]
result = enc_v1 . matmul ( matrix )
result . decrypt () # ~ [157, -90, 153] $ pip install tensealสิ่งนี้ติดตั้งเวอร์ชันแพคเกจล่าสุดบน PYPI หากแพลตฟอร์มของคุณไม่มีแพ็คเกจพร้อมโปรดเปิดปัญหาเพื่อแจ้งให้เราทราบ
แพลตฟอร์มที่รองรับและข้อกำหนดของพวกเขาอยู่ด้านล่าง: (นี่เป็นสิ่งจำเป็นสำหรับการสร้างแรงดึงจากแหล่งที่มาเท่านั้น)
หากคุณต้องการติดตั้ง tenseal จากที่เก็บคุณควรตรวจสอบให้แน่ใจว่าได้ติดตั้งข้อกำหนดสำหรับแพลตฟอร์มของคุณ (ระบุไว้ด้านบน) และ CMake (3.14 หรือสูงกว่า) จากนั้นรับไลบรารีของบุคคลที่สาม (หากคุณยังไม่ได้) โดยเรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีรากของโครงการ
$ git submodule init
$ git submodule updateTeneal ใช้บัฟเฟอร์โปรโตคอลสำหรับการทำให้เป็นอนุกรมและคุณจะต้องใช้คอมไพเลอร์บัฟเฟอร์โปรโตคอลด้วย
หากคุณอยู่บน Windows คุณจะต้องสร้างไลบรารีซีลโดยใช้ Visual Studio คุณควรใช้ Solution File SEAL.sln ใน third_party/SEAL เพื่อสร้างโครงการ nativesrcSEAL.vcxproj พร้อม Configuration=Release และ Platform=x64 สำหรับรายละเอียดเพิ่มเติมตรวจสอบคำแนะนำในการสร้าง Microsoft Seal
จากนั้นคุณสามารถเรียกสร้างและการติดตั้ง
$ pip install . คุณสามารถใช้อิมเมจนักเทียบท่าของเราสำหรับสภาพแวดล้อมที่พร้อมใช้งานด้วยการติดตั้ง tenseal
$ docker container run --interactive --tty openmined/tenseal หมายเหตุ: จุด openmined/tenseal ไปยังภาพจากการเปิดตัวครั้งล่าสุดใช้ openmined/tenseal:dev สำหรับภาพที่สร้างขึ้นจากสาขาหลัก
นอกจากนี้คุณยังสามารถสร้างภาพที่กำหนดเองของคุณซึ่งอาจเป็นประโยชน์สำหรับนักพัฒนาที่ทำงานในโครงการ
$ docker build -t tenseal -f docker-images/Dockerfile-py38 .ในการเรียกใช้อิมเมจนักเทียบท่านี้เป็นคอนเทนเนอร์หลังจากสร้างขึ้นคุณสามารถเรียกใช้งานได้
$ docker container run -it tensealหากต้องการใช้ไลบรารีนี้ในโครงการ Bazel อื่นให้เพิ่มสิ่งต่อไปนี้ในไฟล์ Workspace ของคุณ:
git_repository(
name = "org_openmined_tenseal",
remote = "https://github.com/OpenMined/TenSEAL",
branch = "master",
init_submodules = True,
)
load("@org_openmined_tenseal//tenseal:preload.bzl", "tenseal_preload")
tenseal_preload()
load("@org_openmined_tenseal//tenseal:deps.bzl", "tenseal_deps")
tenseal_deps()
คุณสามารถเปรียบเทียบการใช้งาน ณ จุดใดก็ได้โดยการรัน
$ bazel run -c opt --spawn_strategy=standalone //tests/cpp/benchmarks:benchmarkเกณฑ์มาตรฐานจากการผสาน PR ทุกครั้งจะถูกอัปโหลดที่นี่
A. Benaissa, B. Retiat, B. Cebere, Ae Belfedhal, "Tenseal: ห้องสมุดสำหรับการดำเนินการเทนเซอร์ที่เข้ารหัสโดยใช้การเข้ารหัส homomorphic", ICLR 2021 เวิร์กช็อปเกี่ยวกับการเรียนรู้แบบกระจายและการเรียนรู้ของเครื่องส่วนตัว (DPML 2021)
@misc{tenseal2021,
title={TenSEAL: A Library for Encrypted Tensor Operations Using Homomorphic Encryption},
author={Ayoub Benaissa and Bilal Retiat and Bogdan Cebere and Alaa Eddine Belfedhal},
year={2021},
eprint={2104.03152},
archivePrefix={arXiv},
primaryClass={cs.CR}
}
สำหรับการสนับสนุนในการใช้ไลบรารีนี้โปรดเข้าร่วมช่อง #Support Slack คลิกที่นี่เพื่อเข้าร่วมชุมชน Slack ของเรา!
ยินดีต้อนรับคำขอดึง สำหรับการเปลี่ยนแปลงครั้งใหญ่โปรดเปิดปัญหาก่อนเพื่อหารือเกี่ยวกับสิ่งที่คุณต้องการเปลี่ยนแปลง
โปรดตรวจสอบให้แน่ใจว่าได้อัปเดตการทดสอบตามความเหมาะสม
ใบอนุญาต Apache 2.0