bet9九州登录欢迎您!
bet9九州登录 > 法律文库 > 黎曼猜想可能影响加密方式?会威胁网络安全吗?

黎曼猜想可能影响加密方式?会威胁网络安全吗?

时间:2020-01-06

黎曼猜想涉及到的素数概念也被用于密码研制中。“由于目前还没有发现素数的分布规律,于是密码学家把素数用在加密算法的构造上,利用其计算复杂性,使密码不容易被破解。”闫怀志说。

“用我的方法,‘黎曼猜想’已经被证明了”,9月24日,89岁的迈克尔·阿蒂亚在2018海德堡获奖者论坛上展示了他对“黎曼猜想”难题的证明结果。结果有待商榷迈克尔·阿蒂亚用“简单”的5页纸叙述了他的研究内容。他在摘要中写道:通过理解量子力学中的无量纲常数——精细结构常数,并将此过程中发展出来的数学方法用于解决黎曼猜想。物理学科普作家、科学网博主张轩中从物理的角度向《中国科学报》记者做了分析,他表示,精细结构常数是一个会“跑动”的数,描述两个电子相互吸引力大小,它的耦合常数随着时间的变化而变化,并不是一个“真的常数”。“但阿蒂亚直接论证了精细结构常数是固定的,大约等于1/137,这让物理学家很费解,对第一步就产生了怀疑。”张轩中说。“也许在数学上是对的,毕竟阿蒂亚也是懂物理的,可能他有独到的见解,但这个还需要时间论证。”中国科学院数学与系统科学研究院研究员贾朝华也对《中国科学报》记者说,“立刻对阿蒂亚的研究做分析解读,会是一件很困难的事情,这需要专家们经过较长一段时间的研究探讨。”令数学家如痴如醉的“猜想”“简单来说,‘黎曼猜想’是关于素数的问题,是为了研究素数分布规律。”贾朝华说。在小学五年级,我们的数学课本中第一次出现了“素数”的概念:一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做素数。这样一个简单却粗略地描述,使得数学家们为寻找一个更为精确地表达公式而“前赴后继”。每个自然数都可以表示成素数因子的乘积,素数构成了正整数的基本元素。也就是说,素数的地位相当于生命世界里的DNA。“这是数论最基本的内容,相当于一座大厦的地基,这就是它最大的‘用处’和意义。”贾朝华说。只有认识素数的分布规律,才能对数论有更深入地理解。在黎曼之前,欧几里得用初等方法证明了素数有无穷多个;欧拉用数学分析方法引入了表达公式,描述素数的分布情况;数学大师高斯和勒让德通过大量数值计算,提出了“不大于N的素数分布密度接近N的对数函数的倒数”的猜想,后被证明,成为“素数定理”。但是,数学家们对于“精确和清晰”的追求从未停歇。1859年,德国数学家黎曼发表了一篇题为《论不超过一个给定值的素数的个数》的文章,这是他在解析数论领域发表的唯一一篇文章,文字简练,仅仅8页纸,却成为该领域内最经典的文章。黎曼认为,素数的分布奥秘与一个复杂的函数密切相关,而使这个函数取值为零,即非平凡零点对素数分布的精确规律有着关键性影响,他在文中定义了一个被后世成为“Zeta”的无穷极函数,这也是他开辟的一条独特路径:从一维直线拓展到复数平面中研究素数分布。黎曼猜测,可能所有非平凡零点都全部位于实部等于1/2的直线上,这条线被称为临界线。这就是令后世数学家魂牵梦绕却辗转反侧的“黎曼猜想”。一个半世纪以来,进展甚微。但黎曼指引了新方向,比如,37年后,法国数学家哈达玛和比利时数学家普森独立证明了素数定理,它描述了素数的大部分分布规律。“大师指路,后继者实现。”贾朝华说。“黎曼猜想”偶遇物理学“黎曼猜想”有什么用?一代代数学家为之孜孜不倦究竟为了什么?对于数学家们来说,这是探索未知,用简洁地数字和公式语言描绘复杂世界,让事物变得更清晰的过程,“这是很奇妙的。”事实上,纯粹数学的美也在于此。在贾朝华看来,“黎曼猜想”最大的意义,首先在于大胆的猜测,另外指出了复数函数零点与素数个数如何联系。“非得说实际用处,反而贬低了‘黎曼猜想’的重要性和地位。”后来,人们利用素数的规律之谜,发明了RSA公钥加密算法,作为难以破译的密码,素数找到了“用武之地”。伴随着零点在临界线上分布规律的研究突破,人们发现黎曼猜想与复杂的物理现象竟然有神秘的关联。1972年,数学家蒙哥马利与物理学家戴森在普林斯顿高等研究院偶遇,碰撞出了神奇火花——“如果将黎曼临界直线上的零点和实验记录的大原子的核的能级相比较,两者的分布惊人的相似。”这让纯粹数学触及真实空间,在量子体系等经典的混沌系统中熠熠生辉。在纯数学领域探索百余年而无路可寻,人们转而向其他领域寻找办法。正如迈克尔·阿蒂亚的研究,他报告后,有数学家坚定支持,“阿蒂亚先生已经到了无可挑剔的年龄。”尽管质疑态度还是居多,尽管一时难以给出判断,但迈克尔·阿蒂亚站在物理学的角度,也许为黎曼猜想的解决指出了新方向。

RSA加密解密过程:

PHP的RSA加密解密方法以及开发接口使用,rsa加密解密

网络安全问题很重要,尤其是保证数据安全,遇到很多在写接口的程序员直接都是明文数据传输,在我看来这是很不专业的。本人提倡经过接口的数据都要进行加密解密之后进行使用。

这篇文章主要介绍使用PHP开发接口,数据实现RSA加密解密后使用,实例分析了PHP自定义RSA类实现加密与解密的技巧,非常具有实用价值,需要的朋友可以参考下。

简单介绍RSA

RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。但是有不少新手对它不太了解。下面仅作简要介绍。RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。

下面为具体类、实例:

<?php 

/** 
 * RSA算法类 
 * 签名及密文编码:base64字符串/十六进制字符串/二进制字符串流 
 * 填充方式: PKCS1Padding(加解密)/NOPadding(解密) 
 * 
 * Notice:Only accepts a single block. Block size is equal to the RSA key size! 
 * 如密钥长度为1024 bit,则加密时数据需小于128字节,加上PKCS1Padding本身的11字节信息,所以明文需小于117字节 
 * 
 * @author: ZHIHUA_WEI 
 * @version: 1.0.0 
 * @date: 2017/06/30 
 */ 
class RSA 
{ 
  private $pubKey = null; 
  private $priKey = null; 

  /** 
   * 构造函数 
   * 
   * @param string 公钥文件(验签和加密时传入) 
   * @param string 私钥文件(签名和解密时传入) 
   */ 
  public function __construct($public_key_file = '', $private_key_file = '') 
  { 
    if ($public_key_file) { 
      $this->_getPublicKey($public_key_file); 
    } 
    if ($private_key_file) { 
      $this->_getPrivateKey($private_key_file); 
    } 
  } 

  // 私有方法 
  /** 
   * 自定义错误处理 
   */ 
  private function _error($msg) 
  { 
    die('RSA Error:' . $msg); //TODO 
  } 

  /** 
   * 检测填充类型 
   * 加密只支持PKCS1_PADDING 
   * 解密支持PKCS1_PADDING和NO_PADDING 
   * 
   * @param int 填充模式 
   * @param string 加密en/解密de 
   * @return bool 
   */ 
  private function _checkPadding($padding, $type) 
  { 
    if ($type == 'en') { 
      switch ($padding) { 
        case OPENSSL_PKCS1_PADDING: 
          $ret = true; 
          break; 
        default: 
          $ret = false; 
      } 
    } else { 
      switch ($padding) { 
        case OPENSSL_PKCS1_PADDING: 
        case OPENSSL_NO_PADDING: 
          $ret = true; 
          break; 
        default: 
          $ret = false; 
      } 
    } 
    return $ret; 
  } 

  private function _encode($data, $code) 
  { 
    switch (strtolower($code)) { 
      case 'base64': 
        $data = base64_encode('' . $data); 
        break; 
      case 'hex': 
        $data = bin2hex($data); 
        break; 
      case 'bin': 
      default: 
    } 
    return $data; 
  } 

  private function _decode($data, $code) 
  { 
    switch (strtolower($code)) { 
      case 'base64': 
        $data = base64_decode($data); 
        break; 
      case 'hex': 
        $data = $this->_hex2bin($data); 
        break; 
      case 'bin': 
      default: 
    } 
    return $data; 
  } 

  private function _getPublicKey($file) 
  { 
    $key_content = $this->_readFile($file); 
    if ($key_content) { 
      $this->pubKey = openssl_get_publickey($key_content); 
    } 
  } 

  private function _getPrivateKey($file) 
  { 
    $key_content = $this->_readFile($file); 
    if ($key_content) { 
      $this->priKey = openssl_get_privatekey($key_content); 
    } 
  } 

  private function _readFile($file) 
  { 
    $ret = false; 
    if (!file_exists($file)) { 
      $this->_error("The file {$file} is not exists"); 
    } else { 
      $ret = file_get_contents($file); 
    } 
    return $ret; 
  } 

  private function _hex2bin($hex = false) 
  { 
    $ret = $hex !== false && preg_match('/^[0-9a-fA-F]+$/i', $hex) ? pack("H*", $hex) : false; 
    return $ret; 
  } 

  /** 
   * 生成签名 
   * 
   * @param string 签名材料 
   * @param string 签名编码(base64/hex/bin) 
   * @return 签名值 
   */ 
  public function sign($data, $code = 'base64') 
  { 
    $ret = false; 
    if (openssl_sign($data, $ret, $this->priKey)) { 
      $ret = $this->_encode($ret, $code); 
    } 
    return $ret; 
  } 

  /** 
   * 验证签名 
   * 
   * @param string 签名材料 
   * @param string 签名值 
   * @param string 签名编码(base64/hex/bin) 
   * @return bool 
   */ 
  public function verify($data, $sign, $code = 'base64') 
  { 
    $ret = false; 
    $sign = $this->_decode($sign, $code); 
    if ($sign !== false) { 
      switch (openssl_verify($data, $sign, $this->pubKey)) { 
        case 1: 
          $ret = true; 
          break; 
        case 0: 
        case -1: 
        default: 
          $ret = false; 
      } 
    } 
    return $ret; 
  } 

  /** 
   * 加密 
   * 
   * @param string 明文 
   * @param string 密文编码(base64/hex/bin) 
   * @param int 填充方式(貌似php有bug,所以目前仅支持OPENSSL_PKCS1_PADDING) 
   * @return string 密文 
   */ 
  public function encrypt($data, $code = 'base64', $padding = OPENSSL_PKCS1_PADDING) 
  { 
    $ret = false; 
    if (!$this->_checkPadding($padding, 'en')) $this->_error('padding error'); 
    if (openssl_public_encrypt($data, $result, $this->pubKey, $padding)) { 
      $ret = $this->_encode($result, $code); 
    } 
    return $ret; 
  } 

  /** 
   * 解密 
   * 
   * @param string 密文 
   * @param string 密文编码(base64/hex/bin) 
   * @param int 填充方式(OPENSSL_PKCS1_PADDING / OPENSSL_NO_PADDING) 
   * @param bool 是否翻转明文(When passing Microsoft CryptoAPI-generated RSA cyphertext, revert the bytes in the block) 
   * @return string 明文 
   */ 
  public function decrypt($data, $code = 'base64', $padding = OPENSSL_PKCS1_PADDING, $rev = false) 
  { 
    $ret = false; 
    $data = $this->_decode($data, $code); 
    if (!$this->_checkPadding($padding, 'de')) $this->_error('padding error'); 
    if ($data !== false) { 
      if (openssl_private_decrypt($data, $result, $this->priKey, $padding)) { 
        $ret = $rev ? rtrim(strrev($result), "") : '' . $result; 
      } 
    } 
    return $ret; 
  } 
} 

此为具体的RSA类

<?php 
/** 
 * Author: Wei ZhiHua 
 * Date: 2017/6/30 0030 
 * Time: 上午 10:15 
 */ 
header('Content-Type:text/html;Charset=utf-8;'); 
include "RSA.php"; 
echo '<pre>'; 

$pubfile = 'D:WWWtestrsa_public_key.pem'; 
$prifile = 'D:WWWtestrsa_private_key.pem'; 
$rsa = new RSA($pubfile, $prifile); 
$rst = array( 
  'ret' => 200, 
  'code' => 1, 
  'data' => array(1, 2, 3, 4, 5, 6), 
  'msg' => "success", 
); 
$ex = json_encode($rst); 
//加密 
$ret_e = $rsa->encrypt($ex); 
//解密 
$ret_d = $rsa->decrypt($ret_e); 
echo $ret_e; 
echo '<pre>'; 
echo $ret_d; 
echo '<pre>';  
$a = 'test'; 
//签名 
$x = $rsa->sign($a); 
//验证 
$y = $rsa->verify($a, $x); 
var_dump($x, $y); 
exit; 

网络安全问题很重要,尤其是保证数据安全,遇到很多在写接口的程序员直接都是明文...

“素数的分布看起来似乎并无规律可言,它在数轴上突然出现又突然消失。人们已经掌握的有关素数的最重要知识之一是自然界有无数个素数,而对于素数分布的研究至今寥寥。”闫怀志表示,黎曼猜想就是要试图解开这个谜团。

“黎曼猜想”已被证明?结果再等一段时间吧

# decrypt

找出分布规律不等于能破解密码

d = xgcd ( d , phi_N ) [1] % phi_N

首先,让我们一层层掀开这个世界性数学难题的神秘面纱。这是一个有关素数的猜想。素数,也被称为质数,是指除了1和它本身以外不再有其他因数且大于1的自然数。

       而RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。人们已能分解多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。

不久前,来自爱丁堡大学的名誉教授迈克尔·阿蒂亚宣称自己证明了黎曼猜想,此事在数学界掀起了一阵飓风。和这阵风一同飘来的,还有一篇在网上流传甚广的文章。该文称,黎曼猜想若被证实将会对互联网的加密方式造成影响,可能会威胁网络安全。

P = randint ( 1 , 1000000 ) ; P 955802

由于素数在非对称加密算法中得到大量应用,于是有人将黎曼猜想得证的消息视为让人瑟瑟发抖的“噩耗”。“因为一旦黎曼猜想得证,也就意味着人们发现了素数的分布规律,这就为因式分解求取大素数找到了一条有效途径。因此有人认为,基于大素数之积分解难题设计的非对称加密算法的安全性会受到威胁。”闫怀志分析道。

       最重要的方向还是在优化算法后,制造出真正意义上的量子计算机,破解算法,量子数值计算,量子系统的模拟等等好多复杂的问题将会迎刃而解。

目前,国防、金融、互联网等许多对信息安全性要求较高的领域都大量采用RSA非对称加密算法。这一算法就是利用大素数分解困难的特性,即将两个大素数相乘得出乘积非常容易,但想要对该乘积进行因式分解,进而求取两个大素数却极其困难。

       资料来源:https://en.wikipedia.org/wiki/RSA_Factoring_Challenge

1859年,数学家黎曼发表了《论小于给定数值的素数个数》一文,文中他研究了一个复变量函数,其后被称为黎曼ζ函数。这个复变量函数虽然在复数域中取值,但它与一些普通函数一样,在某些点上函数值为零,这些点被称为函数的零点。其中,特别重要的一部分零点被称为非平凡零点。黎曼猜想即为“非平凡零点分布于一条特殊临界直线之上,该直线通过实轴上的点并和虚轴平行,非平凡零点的实数部分都是1/2”。

sage代码

“通俗地讲,黎曼猜想是假定素数按照精确模式分布,即存在素数地图。证明黎曼猜想就是探究素数分布之谜。”北京理工大学网络攻防对抗技术研究所所长闫怀志在接受科技日报记者采访时表示。

                        https://en.wikipedia.org/wiki/RSA_(cryptosystem)

与素数乘积有关的加密算法

R = IntegerModRing ( N )

由于大素数之积难被分解,因此该密码就难被破解。如果想要破解密码,就需要花费很长时间进行大量运算,但这也就失去了破解密码的意义。

C = R ( P ) ^ e ; C 288

“但这种观点是站不住脚的。”闫怀志表示,该观点忽略了一个重要的事实——发现素数的分布规律并不意味着可对大素数乘积进行因式分解。换言之,即便黎曼猜想被证明成立,人们发现了素数的分布规律,仍难以快速找出符合RSA密钥分解条件的两个大素数。

图片 1

那么,黎曼猜想与密码之间存在什么样的联系?一旦被证实,它真会威胁到网络安全吗?带着这些问题,科技日报记者采访了相关专家。

关于Quantum Algorithms for Computing Short Discrete Logarithms and Factoring RSA Integers阅读报告

黎曼猜想会威胁网络安全吗

文章5.2.2的分解算法问题

“不过,这种担忧也并非是杞人忧天。”闫怀志指出,非对称加密算法利用的是计算的复杂性,一旦人们发现了素数的分布规律,就为找出符合条件的大素数提供了更多的可能性,加上超级计算机的辅助,可能会对基于大素数分解难题设计的非对称加密方式的安全性造成一定的威胁。

类似。也要在L里面寻求一个非0的整数r,可以使算法更为方便和简单的运行。

“不过,这种威胁也是有限的。”闫怀志强调,在互联网加密领域,还有许多加密算法并未采用与大素数相关的算法。例如,很多加密货币采用的是哈希运算和数字证书加密方式,均与分解大素数之积无密切联系。即便采用了RSA非对称加密算法,通常也会和其他类型的加密算法嵌套使用,以实现多重保险。

C = R ( P ) ^ e ; C 75843

前一阵大热,近来被传可能影响加密方式

P = randint ( 1 , 127 ) ; P 97

实习记者 于紫月

# the decrypt key is the multiplicative inverse

       本文作者主要工作是推广本文中的量子算法来计算短离散对数,进一步将指数的大小减少到略大于m位。此外文章根据对短离散对数的算法,RSA整数的因式分解,以及在边信息下寻找组的顺序,可能会被重建为短离散对数问题产生一个算法来分解RSA整数,比shor算法在量子计算机上要求简单更多。

R ( C ) ^ d 46

# decrypt

3、量子算法及量子计算机

C = R ( P ) ^ e ; C 46685

       资料来源:https://en.wikipedia.org/wiki/Discrete_logarithm

上一篇:专坑老年人 江阴多家保健品店被查 内附名单 下一篇:没有了