当前位置: 首页 > article >正文

基于小步大步法(BSGS)的同态加密多项式求值

摘要

本文介绍如何使用小步大步(Baby-Step-Giant-Step,BSGS)加速同态加密的多项式求值,尽量减少密文和密文乘法的次数。

公式

假设我们需要求多项式 p ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n p(x)=a_0+a_1x+a_2x^2+\cdots+a_nx^n p(x)=a0+a1x+a2x2++anxn 在某一点 x x x 的值。

如果直接计算,需要计算 x 1 , x 2 , ⋯   , x n x^1,x^2,\cdots,x^n x1,x2,,xn,需要 n n n次密文乘法。
即使使用Horner法则计算:
p ( x ) = ( ⋯ ( ( a n x + a n − 1 ) x + a n − 2 ) x + ⋯   ) x + a 0 p(x)=(\cdots((a_nx+a_{n-1})x+a_{n-2})x+\cdots)x+a_0 p(x)=(((anx+an1)x+an2)x+)x+a0
也需要 n n n次的密文乘法。

在同态加密中, a i a_i ai与密文 x x x的代价是远远小于两个密文相乘的。

k 1 = k 2 , k 1 k 2 = n + 1 k_1=k_2,k_1k_2=n+1 k1=k2,k1k2=n+1,那么可以将 p ( x ) p(x) p(x)重新写为:
p ( x ) = ∑ j = 0 k 2 − 1 ( ∑ i = 0 k 1 − 1 a i + j k 1 x i ) x j k 1 p(x)=\sum_{j=0}^{k_2-1}(\sum_{i=0}^{k_1-1}a_{i+jk_1}x^i)x^{jk_1} p(x)=j=0k21(i=0k11ai+jk1xi)xjk1.

因此,我们需要计算 x 1 , x 2 , ⋯   , x k 1 − 1 x^1,x^2,\cdots,x^{k_1-1} x1,x2,,xk11 x k 1 , x 2 k 1 , ⋯   , x ( k 2 − 1 ) k 1 x^{k_1},x^{2k_1},\cdots,x^{(k_2-1)k_1} xk1,x2k1,,x(k21)k1.

k 1 = k 2 k_1=k_2 k1=k2,那么需要计算 2 n + 1 2\sqrt{n+1} 2n+1

然后根据公式计算,在每一次外部的乘法都会需要一次密文乘以密文,因此一共需要 3 n + 1 3\sqrt{n+1} 3n+1 次密文乘法。

然后,我们还可以继续利用Horner法则进行优化:
p ( x ) = ( ⋯ ( ( a ( k 2 − 1 ) k 1 x k 1 − 1 + a ( k 2 − 1 ) k 1 − 1 x k 1 − 2 + ⋯ + a ( k 2 − 1 ) k 1 − k 1 ) x k 1 + a ( k 2 − 2 ) k 1 − 1 x k 1 − 1 + ⋯ + a ( k 2 − 2 ) k 1 − k 1 ) x k 1 + ⋯   ) x k 1 + a k 1 − 1 x k 1 − 1 + ⋯ + a 0 p(x)=(\cdots((a_{(k_2-1)k_1}x^{k_1-1}+a_{(k_2-1)k_1-1}x^{k_1-2}+\cdots+a_{(k_2-1)k_1-k_1})x^{k_1}+a_{(k_2-2)k_1-1}x^{k_1-1}+\cdots+a_{(k_2-2)k_1-k_1})x^{k_1}+\cdots)x^{k_1}+a_{k_1-1}x^{k_1-1}+\cdots+a_0 p(x)=(((a(k21)k1xk11+a(k21)k11xk12++a(k21)k1k1)xk1+a(k22)k11xk11++a(k22)k1k1)xk1+)xk1+ak11xk11++a0.

这样就避免 x 2 k 1 , ⋯   , x ( k 2 − 1 ) k 1 x^{2k_1},\cdots,x^{(k_2-1)k_1} x2k1,,x(k21)k1.的额外计算。

参考文献

[1] Paterson, Michael S., and Larry J. Stockmeyer. “On the number of nonscalar multiplications necessary to evaluate polynomials.” SIAM Journal on Computing 2.1 (1973): 60-66.


http://www.kler.cn/news/327353.html

相关文章:

  • 滚雪球学Oracle[2.1讲]:Oracle数据库安装与配置
  • 新品上市!智能无线接入型路由器ZX7981EP,WIFI6技术双频频段
  • 解锁微信小程序新技能:ECharts动态折线图搭配WebSocket,数据刷新快人一步!
  • 数据库 - Mongo数据库
  • 第166天:应急响应-拒绝服务钓鱼指南DDOS压力测试邮件反制分析应用日志
  • ubuntu server 常用配置
  • Spring面试内容大纲
  • ios内购支付-支付宝APP支付提现
  • 互联网前后端分离的开发场景,一般会员和数据权限的判断是放在前端还是后端?
  • 【08】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Scroll容器与Tabs组件
  • 大屏娱乐体验新标杆:海信发布全新一代AI电视
  • 解决MySQL命令行中出现乱码问题
  • Mysql高级篇(中)——多版本并发控制 MVCC
  • 字体文件压缩
  • 深入 Spring RestTemplate 源码:掌握 HTTP 通信核心技术
  • dockerfile部署springboot项目(构建镜像:ebuy-docker:v1.0)
  • Java高效编程(7):消除过时的对象引用
  • 【计算机网络】详解HTTP请求和响应格式常见请求方法Header报头响应报文状态码URL
  • \?拉普拉斯到底在讲什么\?控制理论\?倒立摆/
  • Linux: network: /proc/net/sockstat 解读
  • 163页制造业变革转型:营销/服务/研发/供应链/制造/质量/财务
  • 车视界系统小程序的设计
  • 数据结构——队列的基本操作
  • 鸿蒙开发(NEXT/API 12)【请求用户授权】手机侧应用开发
  • 在Java中使用GeoTools解析POI数据并存储到PostGIS实战
  • 手机如何五开玩梦幻西游端游?用GameViewer远程手机免费畅玩梦幻西游
  • 【大数据】数据中台怎么样助力企业创新和客户实践
  • C++学习,信号处理
  • 组播基础-1
  • 结构体内存对齐与位段