头歌—衍生密码体制

# 第1关:Rabin密码体制

题目描述


任务描述

Rabin密码体制是RSA密码体制的一种。 本关任务:使用Rabin密码体制对给定的明文进行加密。

相关知识

为了完成本关任务,你需要掌握:Rabin密码体制。

Rabin密码体制

在本关中,我们描述Rabin密码体制,假定模数n=pq不能被分解,则该类体质对于选择明文攻击是计算安全的。因此Rabin密码体制提供了一个可证明安全的密码体制的例子:假定分解整数问题是计算上不可行的,Rabin密码体制是安全的,我们现在来描述Rabin密码体制。

Rabin密码体制:设n=pq,其中pq为素数,且p,q≡3(mod4)。设P=C=Zn∗,且定义:K=(n,p,q)。 对于K=(n,p,q),定义 eK(x)=x2mod n 和dK(y)=(y)mod n,其中n的值为公钥,pq为私钥。

Rabin密码体制的一个缺点是加密函数并不是一个单射,所以解密不能以一种明显的方式完成。我们证明如下。假定y是一个有效的密文,这意味着y=x2mod n,对于某一`x∈Zn

让我们从Bob的观点来看解密问题。它得到一个密文y,且想找出 x 使得

x2y(mod n)

这是一个关于Zn中未知元x的二次方程,解密需要求出模n的平方根。这等价于求解两个同余方程:

z2≡y(mod p)z2≡y(mod q)

我们可以利用欧拉准则,来判断y是否为一个模p的二次剩余。实际上如果加密正确地执行,则y是一个模p和模q的二次剩余。不幸的是,欧拉准则并不能帮我们找到y的平方根,他仅能得到一个“是”或“否”的答案。

p≡3(mod 4)时,有一个简单公式来计算模p二次剩余的平方根。假定y是一个模p二次剩余,且p≡3(mod 4),那么我们有:

(±y(p+1)/4)2≡y(p+1)/2(mod p)

≡y(p−1)/2y(mod p)

≡y(mod p)

这里我们又一次使用了欧拉准则,即如果y是一个模p二次剩余,那么`y(p−1)/2≡1(mod p)

因此,yp 的两个平方根为

±y(p+1)/4(mod p)。

同样的讨论,可知 yp 的两个平方根为

±y(q+1)/4(mod q),

然后可以直接用中国剩余定理来得到yn的四个平方根。

: 我们用一个小例子来说明Rabin密码体制的加密和解密过程,假定n=77=7×11。那么加密函数为:

eK(x)=x2mod 77

且解密函数为:

dK(y)=y1/2mod 77

假定Bob需要解密密文y=23。首先需要找到237和模11的平方根。由于711都是模43,我们利用前面的公式:

23(7+1)/4≡22≡4(mod 7)` `23(11+1)/4≡13≡1(mod 11)

利用中国剩余定理,我们计算2377的四个平方根为±10,±32mod 77。因此,四个可能的明文为x=10,32,45,67。可以验证这四个明文平方后模77,约化得到的值为23。这证明了23是一个有效的秘文。

编程要求

根据提示,补全右侧编辑器中 Begin-End 区间的代码,给定模数n和明文x,要求使用Rabin密码体制进行加密。具体要求如下:

  • 从后台获取两个数字nx,输出加密后的密文。

测试说明

平台会对你编写的代码进行测试:

测试输入:

84773093 84754668

预期输出:

8887 9539

思路

看到了这段:

image-20231206112218758

顺手试了一下就成了,没往深了想。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll  long  long
ll e(ll x, ll n);
int main()
{
    int n,x;
    cin>>n>>x;

	printf("%lld", e(x, n));

    return 0;
}

ll e(ll x, ll n) {
	return (x*x) % n;
}

第2关:RSA的语义安全

题目描述

任务描述

前面所说的所有攻破密码体制,实际上是试图找出秘密密钥(对称密码体制的情形)或者私钥(公钥密码体制的情形)。然而,可能敌手的目标并没有那么大的野心,即不能找到秘密密钥或者私钥,他仍可以获得比我们所希望的更多的信息,如果要确保一个密码体制是“安全”的,我们应该考虑这些敌手所具有的适度的目标。

本关任务:给定h表和n的值,利用二分搜索求解出明文。

相关知识

为了完成本关任务,你需要掌握:RSA的语义安全。

RSA的语义安全

到现在为止,我们假定敌手试图攻破密码体制以找出秘密密钥。如果Oscar能够做到这一点,那么密码体制被完全攻破。然而,可能敌手的目标并没有这么大的野心。即使Oscar不能找到秘密密钥或公钥,他仍然可以获得比我们所希望的更多的信息。如果我们要确保一个密码体制是“安全的”,我们应该更准确的估计敌手的目的。 下面列出了潜在的敌手的目的。

完全攻破 敌手能够找出Bob的秘密密钥或者私钥。因此他能解密利用给定密钥加密的任意密文。

部分攻破 敌手能以某一不可忽略的概率解密之前没有见过的密文。或者,敌手能够对于给定的密文,得出明文的一些特定信息。

密文识别 敌手能够以超过1/2的概率识别两个不同明文对应的密文或者识别出给定明文的秘文和随机字符串。

在下面的内容中,我们考虑一些针对RSA类密码体制达到上面某种类型目的可能攻击。我们也介绍在一定的计算假设成立的情形下,如何构造一个公钥密码体制使得敌手不能在多项式时间内识别密文,这样的密码体制称为达到了语义安全。达到语义安全是非常困难的,因为我们是在对抗敌手非常弱的、容易达到目的的攻击。

一些密码体制的弱点就是明文的部分信息可以通过密文“泄露”出去。这表示是对系统的一种部分攻破,实际上它在RSA密码体制中发生了。假定我们给定密文,

y=xbmod n,

其中x表示明文。由于gcd(b,ϕ(n))=1,必然是 b 为奇数的情形。因此 jacobi 符号为

image-20231206112523889

所以,给定密文y,任何人无需解密密文就可以有效地计算(nx)。也就是说,一个RSA加密“泄露”了一些有关明文的信息,即Jacobi符号(nx)的值。

在本关中,我们考虑一些由密码体制泄露的其他特定类型的部分信息:

1.给定y=eK(x),计算parity(y),其中parity(y)表示x的二进制表示的最低位数。 2.给定y=eK(x),计算half(y),其中0≤x≤n/2时,half(y)=0;当n/2<x≤n−1时,half(y)=1

我们将证明假定RSA加密是安全的,RSA密码体制不会泄露这种类型的信息。更精确的说,我们将证明RSA密码解密问题可以Turing约化为计算half(y)的问题。这意味着如果存在一个多项式算法计算half(y),那么存在RSA解密的多项式时间算法。也就是说,计算关于明文的特定信息,即half(y),不会比解密密文得到整个明文来得容易。

我们现在讨论,在给定计算half(y)的假设算法的前提下,如何计算y=dK(x),算法如下所示。

img

我们对算法的原理做一下解释。首先,我们注意到RSA加密函数满足在Zn中的如下乘法性质: eK(x1)eK(x2)=eK(x1x2)

现在利用如下事实: y=eK(x)=xbmod n

容易看到,对于0≤i≤⌊log2n⌋ ,第一个for循环运行第i次时有: hi=half(y×(eK(2))i)==half(eK(x×2i))

我们观察到

img

等等,因此我们利用二分检索技巧来找到x,这就是第二个for循环中完成的。下面用一个小例子来说明。 假定n=1457,b=779,且我们有一个密文y=722。然后假定,我们利用预言Half,我们得到如下hi值:

img

然后我们利用二分查索过程,如下表所示,因此明文为y=⌊999.55⌋=999

img

编程要求

根据提示,补全右侧编辑器中 Begin-End 区间的代码,给定h表和n的值,利用二分搜索求解出明文。具体要求如下:

  • 从后台获取一个字符串

    h
    

    和一个整数

    n
    

    ,利用二分搜索求解明文并输出。

    测试说明

平台会对你编写的代码进行测试:

测试输入:

10101111100
1457

预期输出:

999

思路

字符串是h表,题目已经给出了,我们只需要二分查找y的值即可,向下取整。

过程就是下面这个图,共二分h次,h=1时,l = mid,h=0,r = mid

img

img

代码

#include<bits/stdc++.h>
using namespace std;
#define ll  long  long
char h[100];

int main()
{
    int n;
    scanf("%s",h);
    scanf("%d",&n);

	int len = strlen(h);

	double l = 0, r = n, mid = 0;

	for (int i = 0; i < len; i++) {
		mid = l + (r - l) / 2;
		if (h[i] == '1') l = mid;
		else r = mid;
	}

	cout << int(floor(mid));
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/263283.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

幻彩LED灯带芯片:SM16703SP单点单控 断点续传

幻彩LED灯带芯片SM16703SP3是一款单点单控断点续传的芯片&#xff0c;它采用了先进的技术&#xff0c;可以实现灯光的变化和控制。这款芯片不仅仅可以提供各种丰富多彩的灯光效果&#xff0c;还有断点续传功能&#xff0c; LED断点续传灯条采用了双信号线交叉传输的方案&#x…

【Spring Boot】面试题汇总,带答案的那种

继上次的文章【MySQL连环炮&#xff0c;你抗的住嘛&#xff1f;】爆火之后&#xff0c;越来越多的小伙伴后台留言&#xff0c;要求阿Q总结下其他的“连环炮”知识点&#xff0c;想在金九银十的面试黄金期轻松对线面试官。 同样为了节省大家的时间&#xff0c;阿Q最近对【Sprin…

链接未来:深入理解链表数据结构(二.c语言实现带头双向循环链表)

上篇文章简述讲解了链表的基本概念并且实现了无头单向不循环链表&#xff1a;链接未来&#xff1a;深入理解链表数据结构&#xff08;一.c语言实现无头单向非循环链表&#xff09;-CSDN博客 那今天接着给大家带来带头双向循环链表的实现&#xff1a; 文章目录 一.项目文件规划…

在线商城系统软件源码与报价_OctShop

随着互联网、5G、人工智能的快速发展&#xff0c;人们在家购物已经是生活的重要方式。各种在线商城系统的不断涌现&#xff0c;同时&#xff0c;也给传统的企业商家销售带来了不小的压力&#xff0c;那么&#xff0c;如何调整&#xff0c;以适应时代的发展呢&#xff1f;经过不…

【数据结构和算法】最大连续1的个数 III

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一&#xff1a;滑动窗口 2.2 滑动窗口解题模板 三、代码 3.1 方法一&#xff1a;滑动窗口 四、…

世界第一!移动云刷新虚拟化性能测试世界纪录

近日&#xff0c;国际权威性能测评机构SPEC公布了最新一期虚拟化性能基准测试结果&#xff0c;移动云大云天元操作系统&#xff08;BC-Linux&#xff09;&#xff0c;凭借其出色的虚拟化性能&#xff0c;一举将世界纪录提升了10%&#xff0c;总分达到了8336分。 移动云SPEC vir…

Mybatis-plus动态条件查询QueryWrapper的函数用法

目录 前言1. QueryWrapper2. 函数3. Demo 前言 原本都是在Mapper文件中修改&#xff0c;直到看到项目中使用了QueryWrapper这个函数&#xff0c;大致了解了用法以及功能&#xff0c;发现还可以&#xff01; 对此此贴为科普帖以及笔记帖 1. QueryWrapper MyBatis-Plus 是 My…

Angular 进阶之五: Signals到底用不用?

Angular 在V16的时候推出了Signals&#xff0c;在17正式作为主打功能之一强烈推荐&#xff0c;看过了各种博主的各种科普文章也没说明白&#xff0c;到底这东西值不值得用&#xff1f;毕竟项目大了&#xff0c;重构代码也不是闹着玩儿的。各种科普文章主要在说两点&#xff1a;…

pake协议传输文件magic-wormhole

pake协议传输文件magic-wormhole 1 magic-wormhole简介其他介绍 2 安装magic-wormhole3 使用示范发送文件指定虫洞码长度 接收文件 1 magic-wormhole简介 16.7k star 强推&#xff0c;丝滑、简洁、安全的开源工具——magic-wormhole 项目地址&#xff1a;https://github.com/…

Android应用-flutter使用Positioned将控件定位到底部中间

文章目录 场景描述示例解释 场景描述 要将Positioned定位到屏幕底部中间的位置&#xff0c;你可以使用MediaQuery来获取屏幕的高度&#xff0c;然后设置Positioned的bottom属性和left或right属性&#xff0c;一般我们left和right都会设置一个值让控制置于合适的位置&#xff0…

Bert-vits2-2.3-Final,Bert-vits2最终版一键整合包(复刻生化危机艾达王)

近日&#xff0c;Bert-vits2发布了最新的版本2.3-final&#xff0c;意为最终版&#xff0c;修复了一些已知的bug&#xff0c;添加基于 WavLM 的 Discriminator&#xff08;来源于 StyleTTS2&#xff09;&#xff0c;令人意外的是&#xff0c;因情感控制效果不佳&#xff0c;去除…

【大模型】快速体验百度智能云千帆AppBuilder搭建知识库与小助手

文章目录 前言千帆AppBuilder什么是千帆AppBuilderAppBuilder能做什么 体验千帆AppBuilderJava知识库高考作文小助手 总结 前言 前天&#xff0c;在【百度智能云智算大会】上&#xff0c;百度智能云千帆AppBuilder正式开放服务。这是一个AI原生应用开发工作台&#xff0c;可以…

计算机网络:应用层

0 本节主要内容 问题描述 解决思路 1 问题描述 不同的网络服务&#xff1a; DNS&#xff1a;用来把人们使用的机器名字&#xff08;域名&#xff09;转换为 IP 地址&#xff1b;DHCP&#xff1a;允许一台计算机加入网络和获取 IP 地址&#xff0c;而不用手工配置&#xff1…

【DWJ_1703225514】基于Sklearn航空公司服务质量分析

【Talk is cheap】 # 导入库 import warnings warnings.filterwarnings(ignore)import pandas as pd import seaborn as sns import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False %matplotlib inlinefrom skl…

华为科技:辉煌发展、问题应对与未来战略

导言 作为全球领先的科技公司之一&#xff0c;华为经历了辉煌的发展历程。本文将深入探讨华为科技的发展过程、遇到的问题及解决过程、未来的可用范围&#xff0c;以及在各国的应用和未来的研究趋势。同时&#xff0c;分析在哪些领域华为能够取胜&#xff0c;以及在哪些方面发力…

文献管理软件EndNote X9 mac功能介绍

EndNote X9 for Mac是一款文献管理软件&#xff0c;不仅可以让您免于手动收集和整理您的研究资料和格式化书目的繁琐工作&#xff0c;还可以让您在与同事协调时更加轻松自如。让你的团队专注科研&#xff0c;更高效的共享文献开展协作。 EndNote X9 for Mac功能介绍 引文报告 …

数据结构和算法-红黑树(定义 性质 查找 插入 删除)

文章目录 红黑树的定义和性质为什么要发明红黑树&#xff1f;红黑树怎么考总览红黑树的定义实例&#xff1a;一颗红黑树练习&#xff1a;是否符合红黑树的要求一种可能的出题思路补充概念&#xff1a;节点黑高 红黑树的性质 红黑树的查找红黑树的插入实例小结与黑高相关的理论 …

深入浅出:Swagger annotations (注解)在API文档中的应用

Swagger 提供的注解集是其框架中定义 API 规范和文档的重要工具。这些注解在代码里标注重要部分&#xff0c;为 Swagger 的解析工作铺路&#xff0c;进而生成详尽的 API 文档。开发者编写的注释能够被转换成直观的文档&#xff0c;并展现API端点、参数和响应等信息。这不仅提升…

创新固定资产管理方式:易点易动集成企业微信的全新解决方案

在当今竞争激烈的商业环境中&#xff0c;高效的固定资产管理对于企业的成功至关重要。然而&#xff0c;传统的资产管理方式往往繁琐、容易出错&#xff0c;并且缺乏实时性和准确性。为了解决这些挑战&#xff0c;易点易动与企业微信进行了集成合作&#xff0c;推出了一种全新的…

Enge问题解决教程

目录 解决问题的一般步骤&#xff1a; 针对"Enge问题"的具体建议&#xff1a; 以下是一些普遍适用的解决问题的方法&#xff1a; 以下是一些更深入的Enge浏览器问题和解决办法&#xff1a; 浏览器性能问题&#xff1a; 浏览器插件与网站冲突&#xff1a; 浏览…