BFV全同态密码实现和应用:图片加密

全同态加密:BFV 2009 年,Regev 提出了第一个基于 LWE 的加密方案。方案如下:在 Regev Scheme 中,明文空间是 Z2\mathbb Z_2Z2​,使用 most significant bit encoding。我们可以容易地修改它,使得密码方案基于 RLWE 问题,明文空间为 Rt, t≥2R_t,\, t \ge 2Rt​,t≥2 ,只需把 δ=⌊q/2⌉\delta = \lfloor q/2 \rceilδ=⌊q/2⌉ 替换为 Δ=⌊q/t⌉\Delta = \lfloor q/t 阅读详情

BFV算法原理

个人感觉 这个视频 讲得很好

在这里插入图片描述

在这里插入图片描述

上面是根据视频看得重点。

不关心编码,加密的大致步骤如下
源自 https://zhuanlan.zhihu.com/p/638191070

密钥生成

在这里插入图片描述

加密多项式m

在这里插入图片描述

解密

在这里插入图片描述

图片加密

注意:同态性只针对密文,图片只是密文的一种呈现,不具同态性
BFV同态加密,基于Pyfhel库实现,详细参考 Pyfhel的官方说明

在这里插入图片描述

主程序中修改image_path = "kun.jpg"为你要加密的图片,可实现对图片的BFV加解密。

from PIL import Image
import numpy as np
from Pyfhel import Pyfhel

def enc_au(img_array, key):
    # 2*2的数组线性化
    img_L = img_array.flatten().tolist()
    img_array= np.array(img_L,dtype=np.int64)   #一维数组

    #bfv编码和加密
    ptxt_img = key.encodeInt(img_array)
    ctxt_img = key.encryptPtxt(ptxt_img)


    # 将ctxt 转化为 图片列表
    cimg_bytes= ctxt_img.to_bytes()
    cimg_L = [byte for byte in cimg_bytes] #bytes 转化为数组 数值在 0 到 256 范围内

    #图片数组是一维的,转化为二维数组
    one_dimensional_list = cimg_L
    side_length = int(len(one_dimensional_list) ** 0.5)    # 计算最接近正方形的边长
    padding_count = side_length - (len(one_dimensional_list) % side_length)    # 计算最后一行需要填充的个数
    one_dimensional_list += [0] * (padding_count-1)    # 在一维列表末尾填充0
    one_dimensional_list += [padding_count]
    two_dimensional_list = [one_dimensional_list[i:i+side_length] for i in range(0, len(one_dimensional_list), side_length)]
    cimg_array = np.array(two_dimensional_list)

    cimg_array = cimg_array.astype(np.uint8)

    return cimg_array

def dec_au(encrypted_img_array, key):
    enc_arr = encrypted_img_array.astype(np.int64)
    enc_arr = encrypted_img_array.tolist()
    enc_L = encrypted_img_array.flatten().tolist()
    num_del = enc_L[-1]
    enc_L = enc_L[:-1]
    # 去除末尾的256
    for j in range(num_del-1):
        enc_L = enc_L[:-1]

    flag = True
    while ( flag == True):
        for i in range(256):
            if (enc_L[-i-1] != 0):
                flag = False
                break
        if flag == True:
            for i in range(256):
                enc_L = enc_L[:-1] 
        else: break   

    byte_string = bytes(enc_L)

    #创建ctxt2用于存储图片密文
    ptxt2 = key.encode(2)  # plaintexts created from arrays shorter than 'n' are filled with zeros.
    ctxt2 = key.encrypt(ptxt2)  # Alternatively you can use HE.encryptInt(arr2)

    ctxt2.from_bytes(byte_string)

    rctxt  = key.decryptInt(ctxt2 )

    one_dimensional_list = rctxt.tolist()
    side_length = 128   
    two_dimensional_list = [one_dimensional_list[i:i+side_length] for i in range(0, len(one_dimensional_list), side_length)]
    mimg_array = np.array(two_dimensional_list)

    mimg_array = mimg_array.astype(np.uint8)

    return mimg_array

def image_encrypt(image_path, key):
    # 加载 RGB 图片
    rgb_image = Image.open(image_path)
                  
    # 转换为灰度图
    gray_image = rgb_image.convert('L')

    # 映射到 256 灰度级
    gray_image_256 = gray_image.point(lambda x: round(x * 255 / 255))

    img = gray_image_256.resize((128, 128))  # 调整大小

    img_array = np.array(img)

    # 加密过程
    encrypted_img_array = enc_au(img_array, key)

    aaa=encrypted_img_array.tolist()
    encrypted_img = Image.fromarray(encrypted_img_array)
    encrypted_img.save("encrypted_image.png")

    print("2.Image encrypted and saved as encrypted_image.png\n")    

def image_decrypt(encrypted_image_path, key):
    encrypted_img = Image.open(encrypted_image_path)
    encrypted_img = encrypted_img.convert('L')
    encrypted_img_array = np.array(encrypted_img)

    # 解密过程
    decrypted_img_array = dec_au(encrypted_img_array, key)


    decrypted_img = Image.fromarray(decrypted_img_array)
    decrypted_img.save("decrypted_image.png")

    print("3.Image decrypted and saved as decrypted_image.png\n")


def Create_bfvkey():
    HE = Pyfhel()  # Creating empty Pyfhel object
    bfv_params = {
        'scheme': 'BFV',  # can also be 'bfv'
        'n': 2**14,  # Polynomial modulus degree, the num. of slots per plaintext,
        #  of elements to be encoded in a single ciphertext in a
        #  2 by n/2 rectangular matrix (mind this shape for rotations!)
        #  Typ. 2^D for D in [10, 16]
        't': 256,  # Plaintext modulus. Encrypted operations happen modulo t
        #  Must be prime such that t-1 be divisible by 2^N.
        't_bits': 20,  # Number of bits in t. Used to generate a suitable value
        #  for t. Overrides t if specified.
        'sec': 128,  # Security parameter. The equivalent length of AES key in bits.
        #  Sets the ciphertext modulus q, can be one of {128, 192, 256}
        #  More means more security but also slower computation.
    }
    HE.contextGen(**bfv_params)  # Generate context for bfv scheme
    HE.keyGen()  # Key Generation: generates a pair of public/secret keys
    # HE.relinKeyGen()  # Relinearization key generation

    print("\n1. Pyfhel FHE context generation")
    print(f"\t{HE}\n")
    
    return HE

# 主程序

key =  Create_bfvkey()   


image_path = "kun.jpg"
# pkey = 123
# skey = 123

# 加密原始图像
image_encrypt(image_path, key)

# 解密加密后的图像
encrypted_image_path = "encrypted_image.png"
image_decrypt(encrypted_image_path, key)

基于BFV全同态加密的图片隐私处理实战指南 全同态加密(FHE)作为隐私计算的核心技术,允许在密文上直接进行计算,其结果解密后与明文计算一致。其原理基于复杂的数学难题(如RLWE),通过支持加法与乘法的同态性,在不解密数据的前提下实现安全运算。这项技术的核心价值在于为数据隐私保护提供了革命性解决方案,尤其在安全外包计算和联邦学习等场景中至关重要。在工程实践中,借助Microsoft SEAL等开源库,开发者可以构建隐私保护应用,例如对加密医学影像进行边缘检测或亮度调整,而云端服务器全程无法获取原始数据。本文通过BFV方案和批处理编码,详细拆解了如何将 阅读详情

相关推荐

同态加密(FHE):CKKS与BFV方案的性能对比

对比项CKKSBFV学习曲线★★★☆☆★★★★☆开发效率★★★★★★★★★☆性能表现★★★☆☆★★★★☆社区生态★★★★★★★★★★企业级支持★★★★☆★★★★★🏁最终结论如果你做的是机器学习、金融建模、图像识别等浮点密集型任务→选 CKKS如果你做的是数字签名、投票系统、精确计算等整数敏感任务→选 BFV如果业务复杂,需兼顾两者→建议采用“双方案互补”策略✅终极建议先用 CKKS 快速验证浮点逻辑,再用 BFV 实现最终精确输出。二者结合,才是通往“可信计算”的正道。

shejizuopin的博客 1066

BFV加密方案

BFV加密是主流的基于容错学习问题的全同态加密方案之一,其主要思想是将明文放在密文的高位,通过整除的方式,去除低位的噪声。比如有一个BFV的密文,私钥,则BFV的解密为,其中是一个公开常数,是解密噪声,显然,当噪声足够小的时候,我们可以通过除以t取整获得明文。 公共参数选择 我们需要三个分布噪声分布,私钥分布和一个随机均匀分布,然后是一个分圆多项式,其中是的整数次幂。由和一个大整数定义一个多项式环 ...

watqw的博客 4973

基于CKKS全同态加密的Transformer模型隐私保护推理实践

全同态加密(FHE)是一种允许在加密数据上直接进行计算的前沿密码学技术,其核心原理是通过数学构造(如格密码)实现密文间的加法和乘法运算,而无需解密。这项技术的核心价值在于实现了数据的“可用不可见”,为隐私计算提供了强安全保障。在机器学习领域,FHE使得模型服务方能够在不解密用户数据的前提下完成推理,有效解决了数据隐私与模型效用之间的矛盾。Transformer作为当前自然语言处理和计算机视觉的主流模型架构,其包含的多头自注意力等复杂计算对FHE提出了独特挑战。本文聚焦于CKKS这一支持浮点数近似计算的FHE

weixin_33713350的博客 551

BFV同态加密方案初步学习

BFV是把Bra12的LWE版本推到了RLWE版本,Bra12也可以叫做BFV。

Amire0x的小乐园 2902

同态加密机器学习实战:CKKS/TFHE/BFV方案选型与工程陷阱解析

同态加密(Homomorphic Encryption, HE)作为一种前沿的隐私计算技术,允许在加密数据上直接进行计算,其核心原理是通过数学构造(如格密码学)实现密文态的加法和乘法运算。这项技术的核心价值在于能够从根本上解决数据协作中的隐私泄露问题,实现“数据可用不可见”。在工程实践中,它正被应用于金融风控、医疗AI等需要跨机构数据融合的敏感场景。然而,将同态加密与机器学习(ML)模型结合,构建安全推理服务(Secure Inference as a Service, SITS)时,会面临一系列独特的工程

weixin_33778544的博客 348

TFHE全同态加密核心:LWE与TGSW原理、噪声管理及工程实践

全同态加密(FHE)是一种允许在加密数据上直接进行计算的前沿密码学技术,其核心价值在于能在不解密的前提下处理敏感信息,为数据隐私提供终极保障。该技术的原理基于格密码学中的困难问题,通过巧妙的噪声注入机制实现安全性。在工程实践中,FHE的技术价值体现在能够构建隐私保护的机器学习推理、安全数据库查询等应用场景。其中,TFHE方案因其在门电路级别的高效运算而备受关注,其性能提升的关键在于LWE(Learning With Errors)和TGSW(Torus GSW)两大核心组件的协同。LWE作为基础加密层,将数

weixin_30940783的博客 465

同态加密算法与工程计算(机器学习、隐私计算)

Bootstrapping”方法通过将解密过程本身转化为同态运算电路,并生成新的公私钥对对原私钥和含有噪音的原密文进行加密,然后用原私钥的密文对原密文的密文进行解密过程的同态运算,即可得到不含噪音的新密文。比如 Paillier 算法对加法同态,那么根据公式 (1),其密文的求和应该等于求和后的密文,但实际情况是密文的乘积等于求和后的密文,所以我们一般只要求得到的密文结果和我们预期的计算相同,但是对密文上的计算不作具体要求(一般由加密算法决定)。目前的同态加密算法,主要支持两种运算上的同态:加法和乘法。

zyjwjck的博客 1498

从加密算法攻击到同态加密实战:CKKS方案原理与工程应用

加密算法是信息安全的核心基础,其安全性依赖于数学难题的计算复杂性。然而,算法在实现和应用中可能面临多种攻击,如旁道攻击通过分析功耗、时间等物理信息泄露密钥,Padding Oracle攻击则利用解密过程的错误反馈逐步推导明文。这些攻击揭示了传统加密在数据处理环节的固有风险。同态加密作为一种前沿密码学技术,允许在密文上直接进行计算,从根本上避免了数据处理过程中的明文暴露,为隐私计算提供了新的范式。其中,CKKS方案支持高效的近似算术运算,特别适用于机器学习、数据分析等场景,通过微软SEAL等开源库已能实现工程

weixin_29325515的博客 274

【笔记分享】同态加密技术——实现数据的“可算不可见”

以金子加工为例,假如你是分开将金子给不同工匠进行加工,普通的的箱子就需要将金子一个个的拆开,然后融金,进行加工,这个过程就产生了成本,起码工匠的工时是增加了,但是同态加密就是可以直接将两个神奇的箱子合在一起,增加了组合的自由度,而不妨碍工匠进行加工;同态加密(Homomorphic Encryption, HE)是指满足密文同态运算性质的加密算法,即数据经过同态加密之后,对密文进行特定的计算,得到的密文计算结果在进行对应的同态解密后的明文等同于对明文数据直接进行相同的计算,实现数据的“可算不可见”。

VickyVickar的博客 898

同态加密:连接AI算力与数据隐私的关键技术

同态加密是一种允许在加密数据上直接进行计算的前沿密码学技术,其核心原理在于保持密文运算结果与明文运算结果的一致性。这项技术的核心价值在于,它能够在不解密的情况下处理数据,从而在根本上解决数据隐私与数据利用之间的矛盾。在工程实践中,同态加密正成为实现隐私保护计算的关键组件,尤其在需要调用集中化AI算力处理敏感数据的场景中,例如金融风控与医疗影像分析。通过支持密文状态下的AI模型推理,它使得数据方可以在不暴露原始数据的前提下,安全地利用云端强大的计算资源,有效打破了“数据孤岛”。随着算法优化和硬件加速的进展,这

cnmik42448的专栏 411

施密特正交化_格密码基础 2(Lecture 1,施密特正交化)

注:本文章中内容和图片主要来源于 Oded Regev 的课堂讲义。今天,我们继续学习格的第一章的Lecturer 1,也就是格的基础介绍Introduction,共包含4部分,分别是:Lattices 安全六三:Lattices 、格(Lecture 1,Lattices)Gram-Schmidt Orthogonalization 安全六三:Lattices 、格(Lecture 1,施密特正...

weixin_39612038的博客 325

同态加密方案切换:技术挑战与工程实践路径解析

同态加密作为隐私计算的核心技术,允许在密文上直接进行计算,为云计算与数据安全协作提供了基础保障。其原理基于格密码学等困难问题,通过数学结构实现密文运算功能,技术价值在于能在不暴露原始数据的前提下完成数据处理,广泛应用于金融、医疗等隐私敏感场景。然而,不同同态加密方案(如BFV与CKKS)在数学基础、编码机制与安全假设上存在根本差异,导致跨方案密文转换面临理论壁垒与工程难题。本文聚焦于**同态加密方案切换**这一具体挑战,探讨其背后的**数学结构异构性**、密钥体系冲突等核心难点,并分析解密重加密、系统并行运

weixin_34414196的博客 475

自举电容的工作原理-3句话总结

1、一道面试题 照例,先抛出来一道面试题:“Buck电路的SW引脚通常会放置一颗小电容,这颗电容有什么用?”。这个问题问得比较细,非常考验被面试者的硬件基本功。 2、似懂非懂的答案 有小伙伴可能不太清楚这颗电容的作用,回答不上来。也有小伙伴脱口而出:自举电容,用来做升压的。但后面好像说不出来具体逻辑。 没具体了解过,答不上来,也没啥可惜的。但是了解过一点,但又似懂非懂的这种,给出的答案只是轻轻点水或者千篇一律,那无疑是错过了一个加分项。 3、异步Buck的自举环路组成 既然是针对Buck电路讲自举电容,前面

ltqdxl的博客 3万+

西南科技大学竞赛与实践基于SEAL密码库的格加密算法的原理、实现与运用

**Encoders** 示例解释了SEAL库中的编码器(Encoders)如何工作,特别是整数编码器(IntegerEncoder)和浮点编码器(FloatEncoder)。- **Levels** 探讨了SEAL库中的“级别”(Levels)概念,这是优化同态加密操作性能的关键技术。- **CKKS Basics** 示例介绍了CKKS同态加密方案,这是一种适用于复数和浮点数的同态加密方案。- **BFV Basics** 示例介绍了BFV(BGV)同态加密方案的基本概念和操作流程。

2301_81256253的博客 394

RK3588与FPGA高速PCIe通信:从理论带宽到实战优化的全流程解析

本文深入解析了瑞芯微RK3588与FPGA之间基于PCIe Gen2的高速通信全流程。从理论带宽计算(约1640MB/s)出发,详细拆解了硬件连接、驱动加载、DMA配置等关键步骤,并重点分享了中断优化、内存管理及高级调优等实战技巧,旨在帮助开发者从“跑通”到“跑好”,实现接近理论极限的稳定高效数据传输。

weixin_29175469的博客 332

Silvaco Atlas从头开始(四)——定义材料参数和模型

这部分是关于定义材料参数和模型。

qsz1425AWD2121的博客 4650

HEIR编译器实战:基于同态加密的私有化AI推理完整指南

同态加密是一种允许在加密数据上直接进行计算的前沿密码学技术,其核心原理在于保证计算结果的解密值与对原始明文进行相同操作的结果一致。这项技术的核心价值在于能够从根本上解决数据隐私与安全合规的难题,使得服务提供商能够在无法窥探用户原始数据和最终结果的前提下,提供AI推理等计算服务。在医疗、金融等对数据隐私要求极高的应用场景中,同态加密为实现数据“可用不可见”提供了可行的技术路径。然而,其工程化落地长期受限于性能瓶颈和极高的实现复杂度。谷歌最新开源的HEIR编译器,正是为了应对这一挑战而生,它作为一个基于MLIR

weixin_30616969的博客 360

【ORB-SLAM3】使用安卓手机的摄像头运行ORB3

使用安卓手机的摄像头运行ORB-SLAM3单目

caiqidong321的博客 4995

谷歌HEIR同态加密编译器:让AI在加密数据上安全推理

同态加密是一种允许在加密数据上直接进行计算的前沿密码学技术,其核心原理是通过数学构造使密文运算结果解密后与明文运算结果一致。这项技术的核心价值在于实现了“数据可用不可见”,能够在不解密的前提下完成数据分析与模型推理,从根本上保障了数据在处理过程中的隐私安全。在工程实践中,同态加密技术正通过编译器工具链(如HEIR)降低应用门槛,将高级语言程序编译为可执行同态操作的底层表示。其关键应用场景包括医疗影像分析、金融风控、安全外包计算等对数据隐私有极端要求的领域。本文聚焦于谷歌开源的HEIR项目,它作为一个同态加密

weixin_33721344的博客 394

【智能模型系列】基于Unity和MediaPipe【手部追踪+手势识别】系统开发指南

在本文中,我将详细介绍一个基于MediaPipe的Unity手势识别系统,该系统能够识别多种常见手势(如拳头、点赞、胜利手势等),并提供完整的事件系统来处理手势状态变化。这个系统非常适合用于VR/AR交互、手势控制游戏或任何需要自然用户界面的应用场景。

纯技术流日常开发商业开发记录总结等 585

AutoSAR配置视频讲解:简介

AutoSAR实验视频讲解:闪烁一颗LED实验【简介】 大家好,欢迎来到雪云飞星的《AutoSAR实验课的视频讲解》专栏。看过《AutoSAR入门到精通系列讲解》的朋友们应该对博主不陌生,有很多朋友加了博主的微信成为了好友,还有朋友约过线下见面,博主很高兴大家能从我的博客中获得一些收获。在专栏里博主挖了很多坑,当时也说过想要录制一个AutoSAR的配置视频教程,素材在20年初就已经录好,中间各种原因足足鸽了一年。当时因为一些技术原因只能通过博客的图文形式展示出来,现在我们剪辑了视频,请了专业的配音,希望以视

雪云飞星的博客 9653

LLM推理阶段隐私保护:七大加密技术方案详解与实战选型

在人工智能和大模型应用日益普及的背景下,数据隐私与安全成为核心关切。隐私保护计算旨在实现“数据可用不可见”,即在不解密的前提下完成计算任务,其核心原理是通过密码学或硬件隔离技术,确保数据在处理过程中始终保持加密或不可读状态。这一技术对于构建可信AI系统具有关键价值,尤其在金融、医疗、客服等涉及敏感信息的应用场景中,能有效防止数据在传输与计算过程中的泄露风险。当前,全同态加密和可信执行环境是两种主流实现路径,前者提供理论最强的安全性但计算开销巨大,后者则通过硬件隔离在性能与安全间取得较好平衡。本文聚焦于大模型

weixin_34211761的博客 365

自抗扰控制(ADRC)理论与工程实践:8.2 模糊ADRC、神经网络ADRC等智能融合变体

智能融合ADRC变体概述 自抗扰控制(ADRC)与智能控制方法(如模糊逻辑、神经网络)的融合,旨在突破传统ADRC在非线性、时变系统中的应用局限。智能融合ADRC主要通过以下方式实现性能提升: 模糊ADRC 参数自整定:利用模糊推理在线调节ADRC带宽参数,实现自适应控制。 非线性反馈:用模糊控制器替代线性PD,灵活设计非线性控制策略。 优势:融入专家经验,无需精确模型;局限:依赖规则库设计,稳定性分析困难。 神经网络ADRC 增强ESO:用神经网络学习扰动动态,提高估计精度。

技术工作者 228

谷歌HEIR编译器:同态加密AI推理的工程化实践指南

同态加密是一种允许在加密数据上直接进行计算的密码学技术,其核心原理是通过数学构造实现密文运算与明文运算的等价性。这项技术的工程价值在于能够从根本上解决数据隐私与云端计算之间的信任矛盾,使得医疗、金融等敏感数据可以在不解密的情况下完成AI模型推理。随着机器学习编译器技术的成熟,基于MLIR的中间表示和优化框架为同态加密的性能瓶颈提供了新的解决路径。谷歌开源的HEIR项目正是这一趋势下的关键基础设施,它通过将高级AI计算图自动编译和优化为同态加密后端可执行的低级表示,显著降低了密文计算的工程门槛。对于隐私计算平

weixin_30691871的博客 508

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

基于加密ViT的隐私保护图像检索:原理、实现与优化

图像检索作为计算机视觉的基础应用,其核心在于将图像转化为特征向量并进行相似度匹配。随着数据隐私成为焦点,如何在保护原始数据不被泄露的前提下完成检索,成为技术演进的关键。同态加密技术允许在密文上直接进行计算,为实现这一目标提供了理论基石。通过将加密技术与深度学习模型结合,可以在不暴露图像内容的情况下提取特征并进行匹配,为金融、医疗等敏感场景提供了可行的技术方案。本文聚焦于将高效的视觉Transformer(ViT)模型与CKKS同态加密方案相结合,探讨如何设计加密友好的模型结构、优化密文计算流程,并解决实际部

weixin_30496999的博客 506

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 数据结构与算法设计——模拟电梯运行
Usual 清清
博客等级 码龄5年 15粉丝 7原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值