基于自组装算法破译RSA公钥密码系统
基于自组装DNA计算的NTRU密码系统破译方案
ZH A N G Xun Ca ’ — i 。
NI Yi U ng
CU IG u n — a g Zha o
W A N G a — ng Y n Fe
( p rm n f C n r l ce c n n ie r g,Hu z o g U ie s y o ce c n eh oo y,Wu a 4 0 7 ) De a t e t o to in e d E g n e i o S a n a h n n v ri f S i ea d T c n lg t n h n 3 0 4
的海 量 存 储 能 力 、 化 反 应 的 巨 大并 行 性 以及 组 装 的 自发 有 序 性. 论 分 析表 明 , 方 法具 有 一 定 的 可 行 性. 生 理 该
关键 词 自组 装 ; NA 瓦 片 ; 确 定 性 计 算 ; TR 破 译 ; 钥 密 码 体 制 D 非 N U; 公
出 了一 种 用 自组 装 D NA 计 算 破 译 NT U 公 钥 密 码 系 统 的方 法. 对 N RU 密 码 系 统 的 特 点 , 用 D R 针 T 采 NA 瓦 片 编 码 信 息 , 助 于 瓦 片 间 的粘 性 末 端 进 行 自组 装 , 出 了求 解 多 项 式 卷 积 运 算 的 实 现 方 案 . 此 基 础 上 , 过 引入 非 借 给 在 通 确 定 性 的 指 派 瓦 片 , 出 了一 种 破 译 N R 系统 的非 确 定 性 算 法 . 过 创 建 数 以 亿计 的参 与 计 算 的 D 提 T U 通 NA 瓦片 , 该 算 法 可 以 并 行 地 测试 每个 可 能 的 密 钥 , 以高 概 率 地 输 出 正 确 密钥 . 方 法 最 大 的优 点 是 充 分 利 用 了 DN 瓦 片 具 有 该 A
RSA公钥加密算法实现
RSA公钥加密算法实现RSA(Rivest-Shamir-Adleman)公钥加密算法是一种非对称加密算法,广泛应用于信息安全领域。
它通过生成公钥和私钥对来实现加密和解密过程。
在本文中,我们将介绍RSA公钥加密算法的原理和实现方式。
RSA算法的原理:RSA算法基于数论的原理,具体如下:1.选择两个大素数p和q,并计算它们的乘积n=p×q。
2.根据欧拉定理,计算与n互质的整数φ(n)=(p-1)×(q-1)。
3.选择一个整数e,使得1<e<φ(n),且e与φ(n)互质。
4. 计算e对于φ(n)的模逆元素d,即d × e ≡ 1 mod φ(n)。
5.公钥为(n,e),私钥为(n,d)。
加密过程:Alice想要向Bob发送一条消息m,她使用Bob的公钥(n, e)进行加密:1. Alice将消息m表示为一个整数,其中0 ≤ m < n。
2. 加密得到密文c = m^e mod n。
3. Alice将密文c发送给Bob。
解密过程:Bob使用自己的私钥(n, d)对收到的密文c进行解密:1. 解密得到明文m = c^d mod n。
1.选择两个大素数p和q。
2.计算n=p×q和φ(n)=(p-1)×(q-1)。
3.选择一个整数e,使得1<e<φ(n),且e与φ(n)互质。
4.计算e对于φ(n)的模逆元素d。
5.公钥为(n,e),私钥为(n,d)。
加密函数:1.将明文转换为整数m,其中0≤m<n。
2. 计算密文c = m^e mod n。
解密函数:1. 计算明文m = c^d mod n。
RSA算法的实现需要涉及到大数运算、模幂运算等复杂的数学运算。
在实际应用中,通常使用专门的库实现RSA算法,如OpenSSL。
以下是使用Python实现RSA算法的示例代码:```pythonimport randomdef gcd(a, b):while b != 0:a,b=b,a%bdef mod_inverse(a, m):if gcd(a, m) != 1:return Noneu1,u2,u3=1,0,av1,v2,v3=0,1,mwhile v3 != 0:q=u3//v3v1,v2,v3,u1,u2,u3=(u1-q*v1),(u2-q*v2),(u3-q*v3),v1,v2,v3 return u1 % mdef generate_key_pair(:#选择两个大素数p和qp = random.randint(2 ** 10, 2 ** 11)q = random.randint(2 ** 10, 2 ** 11)#计算n和φ(n)n=p*qphi_n = (p - 1) * (q - 1)#选择ee = random.randint(2, phi_n - 1)d = mod_inverse(e, phi_n)#返回公钥和私钥return (n, e), (n, d)def encrypt(public_key, message):n, e = public_keyreturn pow(message, e, n)def decrypt(private_key, ciphertext):n, d = private_keyreturn pow(ciphertext, d, n)#测试public_key, private_key = generate_key_pair ciphertext = encrypt(public_key, message)decrypted_message = decrypt(private_key, ciphertext) print("Message:", message)print("Ciphertext:", ciphertext)print("Decrypted Message:", decrypted_message)```在以上示例代码中,我们使用了random模块生成随机数,gcd函数计算最大公约数,mod_inverse函数计算模逆元素。
C#基于大整数类的RSA算法实现(公钥加密私钥解密,私钥加密公钥解密)
C#基于⼤整数类的RSA算法实现(公钥加密私钥解密,私钥加密公钥解密)但是C#⾃带的RSA算法类RSACryptoServiceProvider只⽀持公钥加密私钥解密,即数字证书的使⽤。
所以参考了⼀些⽹上的资料写了⼀个RSA的算法实现。
算法实现是基于⽹上提供的⼀个⼤整数类。
⼀、密钥管理取得密钥主要是通过2种⽅式⼀种是通过RSACryptoServiceProvider取得:/// <summary>/// RSA算法对象,此处主要⽤于获取密钥对/// </summary>private RSACryptoServiceProvider RSA;/// <summary>/// 取得密钥/// </summary>/// <param name="includPrivateKey">true:包含私钥 false:不包含私钥</param>/// <returns></returns>public string ToXmlString(bool includPrivateKey){if (includPrivateKey){return RSA.ToXmlString(true);}else{return RSA.ToXmlString(false);}}/// <summary>/// 通过密钥初始化RSA对象/// </summary>/// <param name="xmlString">XML格式的密钥信息</param>public void FromXmlString(string xmlString){RSA.FromXmlString(xmlString);}⼀种是通过BigInteger中的获取⼤素数的⽅法/// <summary>/// 取得密钥对/// </summary>/// <param name="n">⼤整数</param>/// <param name="e">公钥</param>/// <param name="d">密钥</param>public void GetKey(out string n,out string e,out string d ){byte[] pseudoPrime1 = {(byte)0x85, (byte)0x84, (byte)0x64, (byte)0xFD, (byte)0x70, (byte)0x6A,(byte)0x9F, (byte)0xF0, (byte)0x94, (byte)0x0C, (byte)0x3E, (byte)0x2C,(byte)0x74, (byte)0x34, (byte)0x05, (byte)0xC9, (byte)0x55, (byte)0xB3,(byte)0x85, (byte)0x32, (byte)0x98, (byte)0x71, (byte)0xF9, (byte)0x41,(byte)0x21, (byte)0x5F, (byte)0x02, (byte)0x9E, (byte)0xEA, (byte)0x56,(byte)0x8D, (byte)0x8C, (byte)0x44, (byte)0xCC, (byte)0xEE, (byte)0xEE,(byte)0x3D, (byte)0x2C, (byte)0x9D, (byte)0x2C, (byte)0x12, (byte)0x41,(byte)0x1E, (byte)0xF1, (byte)0xC5, (byte)0x32, (byte)0xC3, (byte)0xAA,(byte)0x31, (byte)0x4A, (byte)0x52, (byte)0xD8, (byte)0xE8, (byte)0xAF,(byte)0x42, (byte)0xF4, (byte)0x72, (byte)0xA1, (byte)0x2A, (byte)0x0D,(byte)0x97, (byte)0xB1, (byte)0x31, (byte)0xB3,};byte[] pseudoPrime2 = {(byte)0x99, (byte)0x98, (byte)0xCA, (byte)0xB8, (byte)0x5E, (byte)0xD7, (byte)0xE5, (byte)0xDC, (byte)0x28, (byte)0x5C, (byte)0x6F, (byte)0x0E, (byte)0x15, (byte)0x09, (byte)0x59, (byte)0x6E, (byte)0x84, (byte)0xF3, (byte)0x81, (byte)0xCD, (byte)0xDE, (byte)0x42, (byte)0xDC, (byte)0x93, (byte)0xC2, (byte)0x7A, (byte)0x62, (byte)0xAC, (byte)0x6C, (byte)0xAF, (byte)0xDE, (byte)0x74, (byte)0xE3, (byte)0xCB, (byte)0x60, (byte)0x20, (byte)0x38, (byte)0x9C, (byte)0x21, (byte)0xC3, (byte)0xDC, (byte)0xC8, (byte)0xA2, (byte)0x4D, (byte)0xC6, (byte)0x2A, (byte)0x35, (byte)0x7F, (byte)0xF3, (byte)0xA9, (byte)0xE8, (byte)0x1D, (byte)0x7B, (byte)0x2C, (byte)0x78, (byte)0xFA, (byte)0xB8, (byte)0x02, (byte)0x55, (byte)0x80, (byte)0x9B, (byte)0xC2, (byte)0xA5, (byte)0xCB,};BigInteger bi_p = new BigInteger(pseudoPrime1);BigInteger bi_q = new BigInteger(pseudoPrime2);BigInteger bi_pq = (bi_p - 1) * (bi_q - 1);BigInteger bi_n = bi_p * bi_q;Random rand = new Random();BigInteger bi_e = bi_pq.genCoPrime(512, rand);BigInteger bi_d = bi_e.modInverse(bi_pq);n = bi_n.ToHexString();e = bi_e.ToHexString();d = bi_d.ToHexString();}⼆、加密处理(分别对应两种密钥取得⽅式)公钥加密/// <summary>/// 通过公钥加密/// </summary>/// <param name="dataStr">待加密字符串</param>/// <returns>加密结果</returns>public byte[] EncryptByPublicKey(string dataStr){//取得公钥参数RSAParameters rsaparameters = RSA.ExportParameters(false);byte[] keyN = rsaparameters.Modulus;byte[] keyE = rsaparameters.Exponent;//⼤整数NBigInteger biN = new BigInteger(keyN);//公钥⼤素数BigInteger biE = new BigInteger(keyE);//加密return EncryptString(dataStr, biE, biN);}/// <summary>/// 通过公钥加密/// </summary>/// <param name="dataStr">待加密字符串</param>/// <param name="n">⼤整数n</param>/// <param name="e">公钥</param>/// <returns>加密结果</returns>public byte[] EncryptByPublicKey(string dataStr,string n,string e){//⼤整数NBigInteger biN = new BigInteger(n,16);//公钥⼤素数BigInteger biE = new BigInteger(e,16);//加密return EncryptString(dataStr, biE, biN);}私钥解密/// <summary>/// 通过私钥解密/// </summary>/// <param name="dataBytes">待解密字符数组</param>/// <returns>解密结果</returns>public string DecryptByPrivateKey(byte[] dataBytes){//取得私钥参数RSAParameters rsaparameters = RSA.ExportParameters(true); byte[] keyN = rsaparameters.Modulus;byte[] keyD = rsaparameters.D;//⼤整数NBigInteger biN = new BigInteger(keyN);//私钥⼤素数BigInteger biD = new BigInteger(keyD);//解密return DecryptBytes(dataBytes, biD, biN);}/// <summary>/// 通过私钥解密/// </summary>/// <param name="dataBytes">待解密字符数组</param>/// <param name="n">⼤整数n</param>/// <param name="d">私钥</param>/// <returns>解密结果</returns>public string DecryptByPrivateKey(byte[] dataBytes,string n,string d) {//⼤整数NBigInteger biN = new BigInteger(n,16);//私钥⼤素数BigInteger biD = new BigInteger(d,16);//解密return DecryptBytes(dataBytes, biD, biN);}私钥加密/// <summary>/// 通过私钥加密/// </summary>/// <param name="dataStr">待加密字符串</param>/// <returns>加密结果</returns>public byte[] EncryptByPrivateKey(string dataStr){//取得私钥参数RSAParameters rsaparameters = RSA.ExportParameters(true); byte[] keyN = rsaparameters.Modulus;byte[] keyD = rsaparameters.D;//⼤整数NBigInteger biN = new BigInteger(keyN);//私钥⼤素数BigInteger biD = new BigInteger(keyD);//加密return EncryptString(dataStr, biD, biN);}/// <summary>/// 通过私钥加密/// </summary>/// <param name="dataStr">待加密字符串</param>/// <param name="n">⼤整数n</param>/// <param name="d">私钥</param>/// <returns>加密结果</returns>public byte[] EncryptByPrivateKey(string dataStr,string n,string d) {//⼤整数NBigInteger biN = new BigInteger(n, 16);//私钥⼤素数BigInteger biD = new BigInteger(d, 16);//加密return EncryptString(dataStr, biD, biN);}公钥解密/// <summary>/// 通过公钥解密/// </summary>/// <param name="dataBytes">待解密字符数组</param>/// <returns>解密结果</returns>public string DecryptByPublicKey(byte[] dataBytes){//取得公钥参数RSAParameters rsaparameters = RSA.ExportParameters(false);byte[] keyN = rsaparameters.Modulus;byte[] keyE = rsaparameters.Exponent;//⼤整数NBigInteger biN = new BigInteger(keyN);//公钥⼤素数BigInteger biE = new BigInteger(keyE);//解密return DecryptBytes(dataBytes, biE, biN);}/// <summary>/// 通过公钥解密/// </summary>/// <param name="dataBytes">待加密字符串</param>/// <param name="n">⼤整数n</param>/// <param name="e">公钥</param>/// <returns>解密结果</returns>public string DecryptByPublicKey(byte[] dataBytes,string n,string e){//⼤整数NBigInteger biN = new BigInteger(n,16);//公钥⼤素数BigInteger biE = new BigInteger(e,16);//解密return DecryptBytes(dataBytes, biE, biN);}三、算法实现加密/// <summary>/// 加密字符串/// </summary>/// <param name="dataStr">待加密字符串</param>/// <param name="keyNmu">密钥⼤素数</param>/// <param name="nNum">⼤整数N</param>/// <returns>加密结果</returns>private byte[] EncryptString(string dataStr, BigInteger keyNum, BigInteger nNum) {byte[] bytes = System.Text.Encoding.UTF8.GetBytes(dataStr);int len = bytes.Length;int len1 = 0;int blockLen = 0;if ((len % 120) == 0)len1 = len / 120;elselen1 = len / 120 + 1;List<byte> tempbytes = new List<byte>();for (int i = 0; i < len1; i++){if (len >= 120){blockLen = 120;}else{blockLen = len;}byte[] oText = new byte[blockLen];Array.Copy(bytes, i * 120, oText, 0, blockLen);string res = Encoding.UTF8.GetString(oText);BigInteger biText = new BigInteger(oText);BigInteger biEnText = biText.modPow(keyNum, nNum);//补位byte[] testbyte = null;string resultStr = biEnText.ToHexString();if (resultStr.Length < 256){while (resultStr.Length != 256){resultStr = "0" + resultStr;}}byte[] returnBytes = new byte[128];for (int j = 0; j < returnBytes.Length; j++)returnBytes[j] = Convert.ToByte(resultStr.Substring(j * 2, 2), 16);tempbytes.AddRange(returnBytes);len -= blockLen;}return tempbytes.ToArray();}注:分块⼤⼩最⼤理论值是128位。
密码系统AES私钥RSA公钥的加解密示例
密码系统AES私钥RSA公钥的加解密⽰例⽬录前⾔百科的诠释java使⽤公私钥加解密的实例前⾔密钥是成对存在的,加密和解密是采⽤不同的密钥(公开密钥),也就是⾮对称密钥密码系统,每个通信⽅均需要两个密钥,即公钥和私钥,使⽤公钥进⾏加密操作,使⽤私钥进⾏解密操作。
公钥是公开的,不需要保密,⽽私钥是由个⼈⾃⼰持有,并且必须妥善保管和注意保密。
密码学⾥⾯博⼤精深,下⾯的实例仅供参考百科的诠释公钥(Public Key)与私钥(Private Key)是通过⼀种算法得到的⼀个密钥对(即⼀个公钥和⼀个私钥),公钥是密钥对中公开的部分,私钥则是⾮公开的部分。
公钥通常⽤于加密会话密钥、验证数字签名,或加密可以⽤相应的私钥解密的数据。
通过这种算法得到的密钥对能保证在世界范围内是唯⼀的。
使⽤这个密钥对的时候,如果⽤其中⼀个密钥加密⼀段数据,必须⽤另⼀个密钥解密。
⽐如⽤公钥加密数据就必须⽤私钥解密,如果⽤私钥加密也必须⽤公钥解密,否则解密将不会成功。
java使⽤公私钥加解密的实例仅供参考/*** 数据加密 plainTextData要加密的字符串* @param plainTextData* @return* @throws Exception*/public static Map encrypt(String plainTextData)throws Exception {HashMap result = new HashMap();// keySpec ⽣成对称密钥KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");keyGenerator.init(128);SecretKey secretKey = keyGenerator.generateKey();SecretKeySpec keySpec = new SecretKeySpec(secretKey.getEncoded(), "AES");// RSA ⽤对⽅公钥对‘对称密钥'进⾏加密Cipher cipher = Cipher.getInstance("RSA");String keyFilePathName = pertery.getProperty("bsbank_Key_path")+"PublicKey.keystore";cipher.init(Cipher.WRAP_MODE,loadPublicKeyByStr(loadKeyByFile(keyFilePathName)));byte[] wrappedKey = cipher.wrap(keySpec);result.put("wrappedKey", Base64.encodeBase64String(wrappedKey));// 加密数据cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, keySpec);byte[] encryptedData = cipher.doFinal(plainTextData.getBytes("UTF-8"));result.put("encryptedData", Base64.encodeBase64String(encryptedData));return result;}/*** 数据解密 encryptedData* @param encryptedData* @return* @throws Exception*/public static Map decrypt(Map encryptedData)throws Exception {// 获取密钥byte[] wrappedKey = Base64.decodeBase64(encryptedData.get("wrappedKey").toString());HashMap result = new HashMap();// RSA解密密钥Cipher cipher = Cipher.getInstance("RSA");String keyFilePathName = pertery.getProperty("bsbank_Key_path")+"privateKey.keystore";//使⽤对⽅的私钥解密cipher.init(Cipher.UNWRAP_MODE,loadPrivateKeyByStr(loadKeyByFile(keyFilePathName)));Key key = cipher.unwrap(wrappedKey, "AES", Cipher.SECRET_KEY);// 解密数据cipher = Cipher.getInstance("AES");cipher.init(Cipher.DECRYPT_MODE, key);byte[] decryptedData = cipher.doFinal(Base64.decodeBase64(encryptedData .get("encryptedData").toString()));result.put("decryptedData", new String(decryptedData, "UTF-8"));result.put("wrappedKey", Base64.encodeBase64String(wrappedKey));return result;}private static String loadKeyByFile(String filePathName) throws Exception {BufferedReader br = null;StringBuilder sb = new StringBuilder();try {br = new BufferedReader(new FileReader(filePathName));String readLine = null;while ((readLine = br.readLine()) != null) {sb.append(readLine);}} catch (Exception e) {throw e;} finally {if (null != br) {br.close();}}return sb.toString();}private static RSAPublicKey loadPublicKeyByStr(String publicKeyStr)throws Exception {RSAPublicKey publicKey = null;try {byte[] buffer = Base64.decodeBase64(publicKeyStr);KeyFactory keyFactory = KeyFactory.getInstance("RSA");X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer);publicKey = (RSAPublicKey) keyFactory.generatePublic(keySpec);} catch (Exception e) {logger.error("failed to load pubKey", e);throw e;}return publicKey;}private static RSAPrivateKey loadPrivateKeyByStr(String privateKeyStr)throws Exception {RSAPrivateKey privateKey = null;try {byte[] buffer = Base64.decodeBase64(privateKeyStr);KeyFactory keyFactory = KeyFactory.getInstance("RSA");PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(buffer); privateKey = (RSAPrivateKey) keyFactory.generatePrivate(keySpec);} catch (Exception e) {logger.error("failed to loadPrivateKeyByStr", e);throw e;}return privateKey;}/*** 输出公私钥对* @param filePath* @throws Exception*/private static void genKeyPair(String filePath) throws Exception {KeyPairGenerator keyPairGen = null;try {keyPairGen = KeyPairGenerator.getInstance("RSA");} catch (NoSuchAlgorithmException e) {logger.error("failed to do key gen", e);throw e;}keyPairGen.initialize(1024, new SecureRandom());KeyPair keyPair = keyPairGen.generateKeyPair();RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();try {String publicKeyString = Base64.encodeBase64String(publicKey.getEncoded());String privateKeyString = Base64.encodeBase64String(privateKey.getEncoded());FileWriter pubfw = new FileWriter(filePath + "/PublicKey.keystore");FileWriter prifw = new FileWriter(filePath + "/PrivateKey.keystore");BufferedWriter pubbw = new BufferedWriter(pubfw);BufferedWriter pribw = new BufferedWriter(prifw);pubbw.write(publicKeyString);pribw.write(privateKeyString);pubbw.flush();pubbw.close();pubfw.close();pribw.flush();pribw.close();prifw.close();} catch (IOException e) {logger.error("failed to genKeypair", e);}}以上就是诠释AES私钥RSA公钥的加解密⽰例的详细内容,更多关于AES RSA公私钥加解密的资料请关注其它相关⽂章!。
基于RSA算法的加解密系统实现
基于RSA算法的加解密系统实现RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三人于1978年提出。
它的安全性基于大数分解困难的问题,在现代密码学中被广泛应用于加密通信、数字签名等领域。
RSA算法主要包括密钥生成、加密和解密三个步骤。
首先是密钥生成。
RSA算法使用两个大素数p和q作为私钥的一部分,公钥则由这两个素数的乘积n和一个与(p-1)(q-1)互质的数e组成。
在实际应用中,素数p和q的选取要求较大,一般为1024位或2048位。
生成密钥的具体步骤如下:1.选择两个不同的大素数p和q。
2.计算n=p*q。
3.计算φ(n)=(p-1)*(q-1)。
4.选择一个与φ(n)互质的数e,1<e<φ(n)。
5. 计算d,使得 d * e ≡ 1 (mod φ(n))。
根据扩展欧几里得算法,可以得到d的值。
生成了公钥(n,e)和私钥(d,p,q)后,就可以进行加密和解密操作了。
加密过程如下:1.将明文M转换为整数m,满足0≤m<n。
2. 计算密文C=C^e (mod n)。
解密过程如下:1. 计算明文M=C^d (mod n)。
2.将整数m还原为明文M。
在实际应用中,加密的明文可以是文件、数据等信息,密文则可以通过网络等途径传输,只有掌握私钥的人才能解密得到明文。
这样就保证了信息的安全性。
1.生成密钥对:选择合适的素数p和q,并计算出n、φ(n)、e和d的值。
2.加密:将明文转换为整数m,利用公钥(n,e)进行加密,得到密文C。
3.解密:利用私钥(d,p,q)进行解密,得到明文M。
4.验证:将明文M和原始的明文进行比较,确保解密正确。
可以对生成密钥对、加密和解密等功能进行封装,供用户调用。
这样用户只需要提供明文和公钥,就可以得到密文;而解密则需要私钥才能进行。
需要注意的是,RSA算法虽然安全性较高,但是运算速度较慢,特别是在处理大素数时。
RSA公钥密码算法
定理2.4.3 (RSA公钥密码算法) 设 p , q 是两个不同的 奇素数,n=pq, a 是满足1≤a < n的整数。
整数 e 满足 1 < e < (n) , 且 (e, (n)) =1 。 那么:1) 存在整数 d , 1≤d< (n) , 使得
ed≡1(mod (n))
例3.2.7 用RSA公钥密码系统对“math”加密、解密。 解密过程:
以两字母为一组对“sagh”编码: “sa”=18 ∙ 26+0=468 ,“gh”=6∙26+7=163。
用私钥Kd=(n, d) = (667, 237)解密“sa”=468 和 “gh”=163,计算: (“sa”) d (mod n) =c1 d=468237(mod 667); (“gh”) d (mod n) =c2 d=163237(mod 667);
私钥Kd=(n, d) = (667, 237) 。
2. RSA公钥密码系统加密/解密过程
例3.2.7 用RSA公钥密码系统对“math”加密、解密。 加密过程:
以两字母为一组对“math”编码: “ma”=12∙26+0=312 ,“th”=19 ∙ 26+7=501。
用公钥Ke=(n, e) = (667, 13) 加密“ma”=312 和 “th”=501,计算: c1=(“ma”) e (mod n)=31213(mod 667); c2=(“th”) e (mod n)=50113(mod 667);
2. RSA公钥密码系统加密/解密过程
例3.2.7 用RSA公钥密码系统对“math”加密、解密。 c2=(“th”) e (mod n)=50113(mod 667);
rsa 公钥密码算法
rsa 公钥密码算法摘要:一、RSA 公钥密码算法简介二、RSA 算法的生成过程1.随机生成两个素数P 和Q2.计算N、E 和D三、RSA 算法的加密和解密过程1.加密过程2.解密过程四、RSA 算法的Java 实现正文:RSA 公钥密码算法是一种非常常见的加密算法,其安全性高、可靠性好,被广泛应用于各种网络通信和数据存储场景。
下面我们将详细介绍RSA 公钥密码算法的生成过程、加密和解密过程以及Java 实现。
一、RSA 公钥密码算法简介RSA 公钥密码算法是一种非对称加密算法,即加密和解密所使用的密钥不同。
它由美国计算机科学家RSA(Rivest-Shamir-Adleman)三人于1977 年提出,是一种基于大数因子分解的算法。
二、RSA 算法的生成过程RSA 算法的生成过程主要分为以下几个步骤:1.随机生成两个素数P 和Q在RSA 算法中,我们需要选择两个大素数P 和Q,这两个素数是用来生成公钥和私钥的。
素数是指只能被1 和本身整除的正整数,且越大越难被分解。
2.计算N、E 和D根据P 和Q,我们可以计算出N、E 和D。
其中,N = P * Q,E 是一个与T(T = P * Q - 1)互质的正整数,且E 小于T;D 是满足D * E mod T = 1 的整数。
3.RSA 算法的加密和解密过程RSA 算法的加密和解密过程分为以下两个步骤:1.加密过程在加密过程中,发送方使用接收方的公钥(N、E)对明文进行加密。
加密公式为:M = C * E mod N,其中M 为密文,C 为明文。
2.解密过程在解密过程中,接收方使用自己的私钥(N、D)对密文进行解密。
解密公式为:M = C * D mod N,其中M 为明文,C 为密文。
三、RSA 算法的Java 实现在Java 中,我们可以通过以下步骤实现RSA 算法:1.创建一个RSA 类,其中包含N、E 和D 三个属性。
2.在RSA 类中,实现createKey() 方法,用于生成RSA 密钥。
公钥密码RSA的神经网络破译法
公钥密码RSA的神经网络破译法摘要:RSA公钥密码体制是一种十分有效的公钥密码体制,其在信息安全方面的应用十分广泛.RSA公钥密码是基于尖端数学计算,计算非常复杂,其在实现速度上远不及对称密钥加密系统.从而找出一种有效的破译RSA公钥密码的方法来解决如此复杂的计算问题是十分有意义的.本文选择利用小波神经网络来破译RSA公钥密码,小波神经网络具有收敛速度快,逼近效果好等特点.本文围绕RSA公钥密码和小波神经网络这两个中心课题,研究了RSA密码系统的理论基础,RSA加密和解密算法,小波神经网络理论,小波神经网络的学习算法以及利用小波网络来破译RSA公钥密码.最后本文选取了高频汉字和英文序列,分别以它们的区位码和ASCII码来加密,训练小波网络和检验,总结得出利用小波神经网络来破译RSA公钥密码是一种有效的方法.关键词:RSA加密算法;密码破译;神经网络;小波神经网络;公钥密码体制Neural Network for Deciphering The RSA public key cryptosystemAbstract:The RSA public key cryptosystem is a quite effective public key system,it takes a very important part in the communication safety. Thus, The RSA public key cryptosystem take on a great value in using and great signification.So,it is of great value to find a effective method to decrypt RSA public key cryptosystem,I chose the wavelet neural network to decrypt it. The RSA public key cryptosystem has the advance of convergening quickly and well approach impression.Encircling the two center question public key cryptograph RSA system and wavelet neural network,I investigate the theory of RSA cryptograph system,the encrypting and uncrypting arithmetic of RSA,the theory of wavelet nrural network,the study arithmetic of wavelet neural network and wavelet neural network for Deciphering public key cryptograph RSA system.In the last part of the text,I chose high frequency Chinese chararcters and English serial,use the section codes to encrypt,training and checking up.At last it comes to the aim that it is effective of using wavelet neural network to decrypt public key cryptograph RSA.Key words:RSA encrypt arithmetic;Deciphering cryptograph; Neural network; wavelet neural network ;Public-key encryption目录第1章前言 (1)1.1课题意义 (1)1.2公钥密码学和小波神经网络的国内研究现状 (1)1.3论文的主要内容和技术路线 (3)第2章公钥密码系统 (5)2.1单钥密码 (5)2.2公钥密码 (6)2.3公开密钥密码体制的特点 (6)2.4RSA公钥系统 (8)2.4.1RSA算法的描述 (8)2.4.2RSA体制的加密解和密算法 (9)2.4.3RSA算法中的计算问题 (9)第3章小波神经网络模型 (10)3.1神经网络的结构形式 (10)3.2BP神经网络模型 (11)3.3小波神经网络模型 (13)3.3.1小波函数的定义和结构 (13)3.3.2 小波网络的学习算法 (15)3.3.3 小波网络的学习率的调节 (17)3.3.4小波网络中参数的初始化 (17)3.3.5小波神经网络训练算法的实现 (18)第4章基于小波网络的破译器设计 (22)4.1建立小波神经网络 (22)4.2具体的破译方法 (23)4.3应用实例 (24)4.3.1汉字密文的破译 (24)4.3.2英文序列的破译 (27)4.4结果分析 (28)结论 (33)致谢 (34)参考文献 (35)第1章前言1.1 课题意义Internet给人们的生活,工作带来许多方便,如便捷的网上购物,网上银行,网上证券,电子政务等.Internet的可怕之处在于网络中有一些人利用所掌握的技术非法侵入计算机系统,窃听,截取,篡改,伪造一些重要的数据,造成巨大损失.由于TCP/IP服务的脆弱性和系统漏洞的不可避免性,使得黑客攻击事件不但无法杜绝,反而日益增多.基于目前这种“无网不入”的黑客攻击现状,数据加密显得尤为重要.密码技术是对信息进行重新编码,从而达到隐藏信息内容,使非法用户无法获取信息真实内容的一种手段.在私钥密码体制中,加密和解密所用的密钥是相同的或者相近的,即由加密密钥很容易得出解密密钥.在一个密码系统中.不能假定加密算法和解密算法是保密的,因此,密钥必须保密.然而发送信息的通道往往是不可靠或者不安全的,所以,在对称密码体系中.必须用不同于发送信息的另外一个安全信道来发送密钥,但这个安全信道不一定真的安全为此,人们希望使用一种不需要传递解密密钥的密码体制——公开密钥密码体制.研究破译密码的技术有利于推动加密算法研究,使其不断完善,同时,在战争中通过密码的破译获得敌方信息,对战争的胜负也有重大意义.目前,神经网络在许多领域获得了成功的应用,其中通信及其保密通信就是神经网络的重要研究领域,而密码技术是保密通信的关键技术.利用神经网络可以构造出新型的密码体制,同时利用神经网络高度非线性自适应性也可以构造用于破译各种密码的工具.将神经网络与密码学相结合便构成了神经密码学这个综合学科.1.2 公钥密码学和小波神经网络的国内研究现状人工神经网络具有集体运算的能力和自适用学习能力.随着神经网络理论和应用研究的深入,目前人工神经网络成功应用于人工智能,自动控制,机器人,统计学等领域的信息处理中.其在密码学领域中的应用研究已有一些报导,如用BP网络破译背包系统,RSA密码等.我国的密码学研究者也在进行着这方面的研究.但目前,这方面的研究还只是一些初步结果,还有待于进一步深入的研究.刘宏伟,王昭顾,班晓娟等人分析改进的BP神经网络破译RSA密码的破译原理,并给出了BP神经网络破译器的结构,设计方法和实验结果[1].孟显勇,袁丁分析了用BP神经网络破译椭圆曲线密码的破译原理,给出了BP神经网络破译器的结构和设计方法[3].这些试验表明了方法的有效性和可行性.小波函数在时域和频域具有良好的局部特性,小波神经网络可以对函数进行逼近.因此小波网络通过学习,调节小波函数的伸缩和连接权,能有一个很好的逼近效果.而且还能够捕捉变化的细节,这正是小波网络优于其它单一尺度网络之处.小波神经网络是用小波函数作为激励函数的一种向前网,络综合了神经网络和小波分解在逼近问题上的优点.小波神经网络的概念提出以后,在国内引起了广大学者的研究兴趣,并对其模型和算法进行了若干改进. 焦李成和李衍等人研究了小波神经网络与模糊逻辑的结合[12],用隶属函数辨别权重值,模糊输出的模糊小波网络模型; 焦李成等人在前人的基础上提出了多变量估计小波网络;沈雪勤针对神经元个数过多,网络学习收敛速度较慢等问题,在视频分析的基础上引入能量密度的概念,提出了基于能量密度的小波神经网络[13];何振亚等构造了一种自适应延时小波网络[23],用小波进行逼近存在不同延时的信号,并给出了一种基于时间竞争的学习算法.在应用方面大多数应用都是将小波神经网络应用于函数或信号的逼近上.其中向小东等人将其应用于上证指数的预测上,还有的应用于心电信号的压缩与分类,高翔等人将小波网络应用于非线性系统的辨识中,杨玉峰等人将小波网络应用于雷达信号的过滤.而目前小波神经网络在密码破译方面的研究很少,因此应用小波网络破译公钥密码无疑是一条新的密码技术.其优越性表现在[22]:1.小波神经元的低相关性,使得小波神经网络具有更快的收敛速度.2.当输入信号量样本空间不均匀分布时,即数据点在某些区域较密,而在一些区域稀疏时.小波神经元的良好局部特性和多分辨率学习可以实现很好的匹配.综上所述,小波网络最初应用于函数逼近和语音识别.最后应用领域逐渐推广到参数估计,天气预报,多属性决策,故障诊断域检测,系统识别,数据压缩,非线性时间序列预测等.本文将它应用于公钥密码RSA的破译,也时一种新的尝试和应用.1.3 论文的主要内容和技术路线本文介绍公钥密码体制的基本原理,然后概述了小波神经网络的基本结构及其学习算法,分析了用小波神经网络破译公钥密码的破译原理,给出了小波神经网络破译器的结构和设计方法.建并立小波神经网络拓扑结构,设计方法,并进行了仿真实验.本文采用的是小波神经网络,考虑到小波网络对参数的初始化不是随便的,因此小波神经网络的收敛速度要比BP神经网络可能要快.经过查资料发现,很少有将小波神经网络用于破译公钥密码,因此本文选用小波神经网络用于破译公钥密码是一个新的尝试.通过实例的验证可以知道,这种 RSA公钥密码的小波神经网络破译方法是有效的,可行的.本文的技术路线是:图1-1 本文的技术路线第2章公钥密码系统密码学是以研究通信安全保密为目的,即对信息进行变换,以保护信息不被窃取,解读和利用.密码技术被广泛地用于军事通讯保密,数字签名,信息保密等方面.密码的基本思想是对机密信息进行伪装.一个密码系统完成如下伪装:加密者对需要进行伪装的明文进行加密变换,得到一种不可理解的密文,合法的接收者获得密文后,可以还原得到原来的机密信息.公钥密码学的发展是整个密码学发展中的重大革命.在公钥密码产生之前,传统的密码体制都是基于替换和置换.与只使用一个密钥的对称传统密码不同,公钥密码是非对称的,使用了两个独立的密钥,即公钥和私钥.公钥密码体制的加密算法和加密密钥都是公开的.加密者用合法接收到公钥进行加密 ,接收者收到信息后再用他本人才拥有的私钥进行解密,恢复原有的信息.要说明公钥密码系统,首先来了解一下不同的加密算法:目前的加密算法按密钥方式可分为私钥密码算法和公钥密码算法.2.1 单钥密码单钥密码又称对称式密码,是一种比较传统的加密方式,其加密运算,解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码).因此,通信双方都必须获得这把钥匙,并保持钥匙的秘密.单钥密码系统的安全性依赖于以下两个因素:第一,加密算法必须是足够强的,仅仅基于密文本身去解密信息在实践上是不可能的;第二,加密方法的安全性依赖于密钥的秘密性,而不是算法的秘密性,因此,我们没有必要确保算法的秘密性(事实上,现实中使用的很多单钥密码系统的算法都是公开的),但是我们一定要保证密钥的秘密性.从单钥密码的这些特点我们容易看出它的主要问题有两点:第一,密钥量问题.在单钥密码系统中,每一对通信者就需要一对密钥,当用户增加时,必然会带来密钥量的成倍增长,因此在网络通信中,大量密钥的产生,存放和分配将是一个难以解决的问题.第二,密钥分发问题.单钥密码系统中,加密的安全性完全依赖于对密钥的保护,但是由于通信双方使用的是相同的密钥,人们又不得不相互交流密钥,所以为了保证安全,人们必须使用一些另外的安全信道来分发密钥,例如用专门的信使来传送密钥,这种做法的代价是相当大的,甚至可以说是非常不现实的,尤其在计算机网络环境下,人们使用网络传送加密的文件,却需要另外的安全信道来分发密钥,显而易见,这是非常不智是甚至是荒谬可笑的.2.2 公钥密码正因为单钥密码系统存在如此难以解决的缺点,发展一种新的,更有效,更先进的密码体制显得更为迫切和必要.在这种情况下,出现了一种新的公钥密码体制,它突破性地解决了困扰着无数科学家的密钥分发问题.事实上,在这种体制中,人们甚至不用分发需要严格保密的密钥,这次突破同时也被认为是密码史上两千年来自私码替代密码发明以后最伟大的成就.公钥思想于单向函数f(x)思想密切相关.密码函数满足以下要求:1.从向x计算f(x)容易.2.从f(x)计算x可能不行或者说很困难.这一全新的思想是本世纪70年代,美国斯坦福大学的两名学者Diffie和Hellman提出的,该体制与私钥密码最大的不同是:在公钥密码系统中,加密和解密使用的是不同的密钥(相对于对称密钥,人们把它叫做非对称密钥),这两个密钥之间存在着相互依存关系:即用其中任一个密钥加密的信息只能用另一个密钥进行解密.这使得通信双方无需事先交换密钥就可进行保密通信.其中加密密钥和算法是对外公开的,人人都可以通过这个密钥加密文件然后发给收信者,这个加密密钥又称为公钥;而收信者收到加密文件后,它可以使用他的解密密钥解密,这个密钥是由他自己私人掌管的,并不需要分发,因此又成称为私钥,这就解决了密钥分发的问题.2.3 公开密钥密码体制的特点公开密钥加密系统采用的加密钥匙(公钥)和解密钥匙(私钥)是不同的.由于加密钥匙是公开的,密钥的分配和管理就很简单,比如对于具有n个用户的网络,仅需要2n个密钥.公开密钥加密系统还能够很容易地实现数字签名.因此,最适合于电子商务应用需要.这些算法有以下重要特性:(1)仅仅知道密码算法和加密密钥而要确定解密密钥,在计算上是不可能的.(2)两个相关密钥中任何一个都可以用作加密而让另外一个用作解密.图2-1给出了公开密钥加密过程.其中重要步骤如下:(1)网络中的每个端系统都产生一对用于它将接收的报文进行加密和解密的密钥.(2)每个系统都通过把自已的加密密钥放进一个登记本或者文件来公布它,这就是公开密钥.另一个密钥则是私有的.(3)如果A想给B发送一个报文,他就用B的公开密钥加密这个报文.(4)B收到这个报文后就用他的保密密钥解密报文.其他所有收到这个报文的人都无法解密它,因为只有B才有B的私有密钥.使用这种方法,所有参与方都可以获得各个公开密钥,而各参与方的私有密钥由各参与方自己在本地产生,因此不需要被分配得到.只要一个系统控制住它的私有密钥,它收到的通信内容就是安全的.在任何时候,一个系统都可以更改它的私有密钥并公开相应的公开密钥来替代它原来的公开密钥.公钥密码算法最重要的特点是采用两个相关的密钥将加密和解密能力分开.其中一个密钥是公开的,称为公钥,用来加密另一个密钥是为用户专用,是保密的称为私钥,用来解密.其基本思想如图2-1所示.图2-1 加密图2-2 鉴别2.4 RSA 公钥系统RSA 公钥系统是公钥密码体制中的一种典型的密码系统.它的安全性是基于大数因子分解,而大数分解是计算上困难的问题,目前还不存在一般性的有效算法.RSA 公钥密码体制是1979年由Rivest,Schamir,Adleman 提出的,它符合对公开密钥密码体制的要求,并获得了广泛的应用.2.4.1 RSA 算法的描述RSA 体制的加密,解密过程的互逆性主要基于欧拉(Euler)定理:若1),(=n a(2-1) 则)(mod 1)(n a n ≡ϕ. (2-2)接收者随机选取两个素数p 和q ,p 和q 的选取应满足[5]:p 和q 应有大致相同的比特长度,且足够大;p 和q 的差q p -不应太小;使用强素数p 和q .计算pq n =,与n 互素且小于n 的整数个数为:)1)(1()(--=q p n ϕ (2-3)随机选取一个与)(n ϕ互素的整数e 作为公开的加密密钥KU={n e ,},由e 求出秘密的解密密钥KR={}n d ,,满足))((mod 1n ed ϕ≡ (2-4)2.4.2 RSA 体制的加密解和密算法公开告诉发送方(n e ,),发送方对消息M 进行分组,分组长度l 保证n l ≤2,用m 表示某一分组后的消息的十进制表示,n m <≤0,并执行下面的加密运算得到密文C:n m m E c e m o d )(== (2-5)接收者收到密文C 后,执行与加密互逆的运算:n c c D m d m o d )(== (2-6)2.4.3 RSA 算法中的计算问题公开密钥加密系统是基于尖端的数学难题,计算非常复杂,它的安全性更高,但它实现速度却远赶不上对称密钥加密系统.在实际应用中可利用二者的各自优点,采用对称加密系统加密文件,采用公开密钥加密系统加密“加密文件”的密钥(会话密钥),这就是混合加密系统,它较好地解决了运算速度问题和密钥分配管理问题.因此,公钥密码体制通常被用来加密关键性的,核心的机密数据,而对称密码体制通常被用来加密大量的数据.在此因改强调:1. 因子分解时难于处理的或是在RSA 特殊情况下是难于处理的;2. RSA 的密码分析需要因子分解,即任何密码分析方法都离不开因子分解.由此可见RSA 公钥密码系统的破译对于大量的数据时,其计算量是相当大的,因次寻找出一种简洁有效的破译方法是不十分必要的.以用来解决破译公钥密码时大量的时间开销,提高密文的解析效率.第3章 小波神经网络模型本章主要介绍神经网络的结构,神经元的基本结构;然后介绍了著名的BP 神经网络的结构和基本基本的概念,最后着重介绍了小波神经网络的结构,小波神经网络的学习算法,及常用的Morlet 小波函数,最后介绍了小波训练算法实现的程度流程,并分析了算法的收敛性.3.1 神经网络的结构形式人工神经网络是由大量的人工神经元广泛互联而成的网络.人工神经元是对生物神经元的简化与模拟,是神经网络的基本处理单元单个的神经元模型如图3-1所示.图3-1 单个人工神经元模型神经元是一个多输入,单输出的非线性元件,其输入输出关系可描述为[2]:)(∑-=θi i X W f O其中m X X X ,,,21Λ表示它的m 个输入,m W W W ,,,21Λ表示对应于这m 个输入的连接权值,θ是一个阈值(θ一般不是一个常数,它是随着神经元的兴奋度而变化的),R R f →:是表示神经元输入—输出关系的函数,称为激励函数或输出函数.激励函数有许多类型,常规神经网络中比较常用的激励函数可归结为三种形式:阈值型,S 型和线性型.S 型( Simoid 响应特性)激励函数的输出特性比较软,其输出状态的取值范围为[0,1]或[-1,1],它的硬度可由系数λ来调节.S 型激励函数可分为单极型的S 型激励函数和双极型的S 激励函数,其表达式为[8]:(1) 单极型的S 型激励函数:0,)e x p (11)(>-+=λλn e t n e t f (3-1) )1,0()(∈net f(2) 双极型的S 型激励函数:0,)e x p (12)(>-+=λλn e t n e t f (3-2) )1,1()(-∈net f式中,X W net T =是权值与输入的矢量积(标量).将神经元通过一定的结构组织起来,就可以构成人工神经元网络.目前有代表性的神经网络模型有感知器,BP 神经网络,RBF 网络,双向联想记忆(BAM),Hopfield 模型等[7].3.2 BP 神经网络模型BP 神经网络是基于BP(Back Propagation)误差逆传播算法的多层前馈神经网络,1986年由D.E.Rumelhart 等人提出[11].BP 神经网络按拓扑结构分,属前向网络,但它采用的是反向传播的学习方法.因此有称反向传播网络(Back-Propagation Neural Network),简称BP 网络.B-P 算法学习的具体步骤:(1)从训练样例集中取一样例,把输入信息输入到网络中.(2)由网络分别计算各层节点的输出.(3)计算网络的实际输出与期望输出的误差.(4)从输出层反向计算到第一个隐层,按一定原则向减小误差方向调整网络的各个连接权值.(5)对训练样例集中的每一个样例重复以上步骤,直到对整个训练样例集的误差达到要求时为止.图3-2 BP 神经网络事实上,BP 神经网络可以看成是输入与输出集合之间的一种非线性映射.而实现这种非线性映射关系,并不需要知道所要研究系统的内部结构,只需通过对有限多个样本的学习来达到对所研究系统内部结构的模拟.基本的BP 网络模型的拓扑结构如图所示.它有输入层,中间层隐含和输出层.中间隐含层可以是一层或多层.图是只含一个隐含层的BP 网络.BP 网络的每个神经元只前馈到其下一层的所有神经元,没有层内连接,各层连接和反馈连接.它的学习过程包括:正向传播和反向传播.正向传播时,输入信息从输入层经由隐层单元处理后传向输出层,则转入反向传播,将误差信号沿原来的神经元连接通路返回.返回过程中,逐一修改各层神经元连接的权值.这种过程不断迭代,最后使得信号误差达到允许的误差范围之内[5].BP 网络的激励函数通常采用有一定的阈值特性的,连续可微的Sigmoid 函数.BP 网络的学习算法通常采用误差逆传播校正方法(BP 算法)来调节网络连接权值和阈值,即利用实际网络输出与期望输出误差对网络的各层连接权值和阈值由后向前逐层进行校正,并通过不断的反复训练学习(循环记忆训练),使得网络具有模拟问题的能力.BP 网络是多非线性可微分函数进行权值训练的多层网络,它主要用于函数逼近,模式识别,分类及数据压缩等.在人工神经网络实际应用中,大部分的人工神经网络模式是采用BP 网络或者它的变形形式,它也是前向网络的核心部分体现了人工神经网络最精华的部分.本文所阐述的小波神经网络就是建立在BP 网络的结构基础上的.3.3小波神经网络模型小波神经网络是基于小波分析理论而构造出的一种分层,多分辨率的新型人工神经网络,是用非线性小波基取代通常的非线性Sigmoid 函数,其信号表述是通过将所选取的小波基进行线性叠加来表现的.在构造小波神经网络时通过对小波分解进行平移和伸缩变换,得到一簇小波函数系,可以用来表示和逼近任一函数.由于引入了平移和伸缩因子,使得小波神经网络具有比小波分解更多的自由度,从而使其具有更灵活有效的函数逼近能力和较强的容错能力.另外,由于网络权系数线性分布和学习目标函数的凸性,使网络训练过程从根本上避免了局部最优化问题.3.3.1 小波函数的定义和结构满足下述条件的函数h(t)称为小波母函数dt t h ⎰+∞∞-)( (3-3)这使得小波具有有限能量∞<⎰dw w w |||)(|2ψ (3-4) 其中, )(w ψ表示)(t h 的傅里叶变换.则以函数12)()(R L w ∈ψ为母小波函数,采用不同的平移和伸缩因子,可生成一维小波函数系.),(),(1)(2,R b a ab t a t b a ∈-=ψψ (3-5) 其中,a 为伸缩因子,b 为平移因子, a 1为归一化系数.取上述一维小波函数系作为神经网络传递函数代替Sigmoid 函数,就构成了小波神经网络,可以达到对任意函数的最佳逼近.由于)(,t b a ψ满足框架性质,即存在两个常数∞<≤<B A 0,使得对任意)(2R L f ∈,有222||||,||||f B L f f A ≤><≤∑ρ这表明使框架)(,t b a ψ中元素的所有线性组合的集合属于)()(,t t g b a ψ∈,于是有∑=-=n k kk k a b t w t g 1)()(ψ (3-6) 其中,n 为小波基的个数.对于具有m 个输入的多输入网络,式(3-6)变为∑∑==⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡-=n k k n i k i ki k a b i i t u w t g 11))(()(ψ (3-7) 其中, ki u 表示第k 个输入样本对的第i 个元素的权值.小波网络是一种以小波基函数为神经元的前馈网络模型,它既可看作是一种以小波函数为基底的函数连接型网络,也可以认为是径向基函数网络的推广.它一般采用单隐层结构,但这并不影响其逼近能力.Suz 给予信号表示的小波网络模型中输出层激励函数为线性函数,这有利于理解信号的小波表示的物理意义.自适应小波网络是一种有“叠加小波”构成的.小波是指自适应小波的线性组合,其本身也可以被看成一普通小波.在叠加小波中,其尺度会在信号处理过程中改变,也就是说,小波基本形状可以适应特定的应用,而不是仅仅对固定形状小波参数.其基本思想是:一信号函数)(t f 可以通过所选取的小波基进行线性叠加来拟合.其小波网络结构如图3-3所示:。
RSA公钥密码算法的加密和解密
(1)选取两个大素数 p, q (2) 计算n=pq, (n)=(p-1)(q-1) (3) 随机选取e: 1<e<(n),与(n)互素 (4) 使用扩展欧几里德算法计算 即ed = 1 mod (n) (5)以(e,n)为公钥,(d,n)为密钥
加密算法
发送方:
a a
m
(
bi 0
2i )
a
bi 0
( 2i )
a modn ( a
m bi 0
( 2i )
) modn ( [a
bi 0
( 2i )
modn]) modn
密钥产生
确定两个素数p和q 选择e或d计算另外一个
素数选取
为了避免攻击者用穷举法求出p和q,应该从足够 大的集合中选取p和q。即p和q必须是大素数。 没有产生任意的大素数的有效技术,通常的作法 是随机选取一个需要的数量级的奇数并检验这个 数是否是素数。若不是则挑选下一个随机数直至 检测到素数为止。
(1)获取公钥e,对明文m加密 (2)计算密文 c≡me mod n
(3)发送密文)利用私钥d解密,恢复明文m m≡cd mod n
例子
已知p=3,q=11,明文m. (1) 求密钥; (2) 写出相应的加密算法和解密算法; (3) 对明文m=8加密,解密。 解: n=p×q=33,且(n)=(p-1)(q-1)=20 取e=7,e满足满足1<e<(n),且gcd((n),e)=1 可解模方程 ed mod (n)=1, 即 7d mod20=1 得到d=3
RSA的安全性
对RSA的攻击方法主要有以下三种: 1. 强力攻击(穷举法):尝试所有可能的私有密 钥 2. 数学分析攻击:有多种数学攻击方法,其本质 等价于试图分解两个素数的乘积 3. 计时攻击:记录计算机解密消息所用的时间。
rsa公钥加密解密算法过程
rsa公钥加密解密算法过程嘿,咱今儿来聊聊 RSA 公钥加密解密算法过程哈!这玩意儿就像是给咱信息上了一把超级牢固的锁。
你想啊,咱平时发个重要消息,那可得小心谨慎,不能让别人随便偷看了去呀。
RSA 公钥加密就像是给咱的消息穿上了一层厚厚的铠甲。
它的过程呢,其实挺有意思。
首先得有两个大质数,这俩质数就像是守护秘密的卫士。
然后通过一系列神奇的运算,就得到了公钥和私钥。
公钥呢,就可以大大方方地给别人,让他们用这个来加密信息发给咱。
这就好比你有一把钥匙可以把宝贝锁进箱子里,但这把钥匙你可以给别人,让他们帮忙锁东西。
而私钥呢,就只有咱自己知道,就像那开启宝贝箱子的唯一钥匙。
等别人用公钥加密了信息发给咱后,咱就用私钥来解密。
哇塞,信息就像变魔术一样又出现啦!这是不是很神奇?你说这像不像一个神秘的密码世界?别人看着是一堆乱码,只有咱拿着私钥才能解开这个谜团。
RSA 公钥加密解密算法过程,就像是在信息的海洋里搭建了一座坚固的城堡。
别人很难攻进来,而咱在里面可以安心地守护着自己的秘密。
它在很多地方都大显身手呢!比如在网络安全领域,保护着我们的各种重要数据。
没有它,那我们的信息不就像在大街上裸奔一样危险啦?想想看,如果没有这种加密算法,那我们的银行账户信息、个人隐私啥的不都随便让人看啦?那多可怕呀!所以说呀,RSA 公钥加密解密算法过程可真是个了不起的发明。
它让我们在这个信息爆炸的时代,能有一片属于自己的安全小天地。
咱可得好好感谢那些发明这个算法的聪明人,是他们让我们的信息有了保障。
让我们能放心地在网络世界里遨游,不用担心自己的秘密被别人窥探。
反正我是觉得这 RSA 公钥加密解密算法过程超厉害的,你难道不这么认为吗?。
rsa公钥密码算法的原理
rsa公钥密码算法的原理宝子!今天咱们来唠唠那个超酷的RSA公钥密码算法的原理呀。
咱先想象一下,你有个超级机密的小秘密,就像你藏在心底最深处的暗恋对象的名字,你不想让别人知道,但是呢,又得告诉特定的人。
这时候密码算法就像一个神奇的小魔法啦。
RSA算法呀,它可是建立在一些数学魔法之上的哦。
这里面有两个超级重要的角色,一个是公钥,一个是私钥。
公钥呢,就像是你家的邮箱地址,谁都能看到,谁都能往这个地址寄东西。
私钥呢,就像是你家邮箱的钥匙,只有你自己有,只有用这个钥匙才能打开邮箱拿到里面的信件。
那这公钥和私钥是怎么来的呢?这里面就涉及到一些数学小把戏啦。
我们得找两个超级大的质数,大到什么程度呢?就像天上的星星一样多的位数那种。
比如说我们找到质数p和q,然后把它们相乘得到一个数n,这个n就像是一个大城堡,是整个算法的基础哦。
然后呢,我们还得通过一些数学公式算出另外两个数,e和d,e就是公钥的一部分,d就是私钥的一部分啦。
当你想把你的秘密信息发送给别人的时候,就用公钥来加密。
就好像你把你的小秘密放进一个带锁的盒子里,这个锁只能用公钥锁上,然后你就可以放心地把这个盒子寄出去啦。
别人拿到这个盒子,没有私钥的话,就像没有钥匙,怎么也打不开这个盒子,只能干瞪眼。
那这个加密过程是怎么在数学上实现的呢?其实就是把你的信息按照一定的数学规则,利用公钥中的e和n进行计算,把原本清晰的信息变成一串看起来乱七八糟的数字,就像你把一幅漂亮的画变成了一堆颜色杂乱的颜料块。
而当这个加密后的信息到达接收方的时候,接收方就可以用自己的私钥来解密啦。
这个私钥中的d就像是一把超级魔法钥匙,它可以把那些乱七八糟的数字还原成你原来的秘密信息。
这就好像把那些杂乱的颜料块又重新变回了漂亮的画。
你可能会想,为啥这个算法这么安全呢?这是因为要想从公钥推算出私钥,那就得把n分解成p和q这两个质数。
但是呢,对于超级大的n来说,这就像是在大海里找一根特定的针一样困难。
基于自组装算法破译RSA公钥密码系统
(a)
(b)
(c)
(d)
图 1 非确定性指派子系统的基本 Tile类型
型.其 中:s0 为 起 始 Tile S0 对 应 的 黏 贴 末 端;m0
和 m1 分别为 连 接 Tile M0 和 M1 对 应 的 黏 贴 末
端;q 表示随机指派整数Q 的 值 变 量qj,j 为 整 数 Q 二进制位数,且不超过待分解整数 N 的一 半 位
根据输入端的取值组合且变量pi第39卷中的连接tile通过它可传递整数因子qqi前一位的进位c以及整数因子p为乘法子系统运算开始时的连接tile其中m0和m1为连接tile13比较子系统该子系统能处理二进制数并从最低位到最高位比较其大小所设置tile的黏贴末端的值为待分解整数与上一步中由乘法子系统计算出的乘法的结果若待分解整数n的结果s第i位的值相等在考虑第i1位大小结果为等于的情况下则在该位上tile的值记为等于同时要传递到第i1位
数;m珡1 为黏贴末端“m1”的 补 序 列.第 1 种 Tile类
型(图1(a))为连接 初 始 Tile并 产 生 P 的 最 低 位
的值.第2 种 Tile类 型 (图 1(b))为 产 生 P 的 中
间位和最高位的值.对于 N 的一半以上位数到最
高位,不需要随 机 指 派 P 的 值,此 时 产 生 P 的 值
先将待分解的整数按照从低位到高位的顺序 排列在输入的种 子 配 置 的 底 层,在 此 基 础 上 可 以 随机产生整 数 P 的 值,指 派 P 的 每 一 位 的 Tile 的输 出 端 不 受 该 Tile 的 值 的 限 制.当 随 机 指 派 Tile的值为a 时,输 出 端 为(a,b)(其 中a 和b 的 值均可取 为 0 或 1,且b 的 值 为 随 机 产 生 的 P 的 某位上的值).而 与 随 机 指 派 Tile相 连 的 Tile的 值为“a* ”,输出端为(a,0).
基于DNA自组装的EIGamal系统破译
基于DNA自组装的EIGamal系统破译郑艳【摘要】自组装DNA计算在破译密码系统方面,具有传统计算机无法比拟的优势.采用DNA分子瓦编码信息,借助于分子瓦之间的粘性末端进行自组装,通过引入非确定性的指派型分子瓦,提出了用自组装DNA计算破译EIGamal公钥密码系统的非确定性算法.通过创建数以亿计的参与计算的DNA分子瓦,该算法可以并行地以高概率地破译EIGamal公钥密码系统.【期刊名称】《信息安全与技术》【年(卷),期】2014(005)002【总页数】5页(P47-51)【关键词】自组装;DNA分子瓦;EIGamal算法【作者】郑艳【作者单位】漯河食品职业学院河南漯河462000【正文语种】中文EIGamal算法既可用于数字签名又可用于加密,其安全性依赖于计算有限域上离散对数的难度。
要产生一对密钥,首先选择一素数p,两个随机数g和x,g和x都小于p,然后计算Y=gxmod p公开密钥是y,g和p,g和p可由一组用户共享。
私人密钥是x。
密码学算法是多种多样的,利用DNA计算特有的高速并行性和高存储性,人们开始利用DNA计算来实现密码分析和密码加密的技术。
与此同时,生物技术获得了飞速的发展,尤其是人类基因组测序计划完成,容易产生大量互异的DNA序列,这诱发了人们利用生物技术的方法对信息进行加密的思想。
DNA计算的代数运算、基于表面的DNA计算以及自组装DNA计算等方法已经在理论上解决了一些图论、网络、优化以及密码等问题。
目前已有学者提出了基于DNA的加密和解密技术。
本文通过深入分析公钥密码系统地特点,给出基于自组装DNA计算的EIGamal公钥密码系统破译方案对消息M加密,首先要选择随机数k,只要k与p-1互素。
然后计算:a=gkmod pb=ykM mod pa和b是密文对。
注意密文的大小是明文的两倍。
解密a和b时,计算:M=b/ax(mod p)因为ax=gkxmod p以及b/ax=ykM/ax=gxkM/gxk=M mod p都成立,除了y是密钥的一部分以及加密是和yk相乘得来。
RSA加密算法的破解
RSA加密算法的破解1.什么是RSA加密算法RSA加密算法是在1977年开发的,是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
在RSA算法中,我们先要获得两个不同的质数P和Q做为算法因子,再找出一个正整数E,使得E与 ( P - 1 ) * ( Q - 1 ) 的值互质,这个E就是私钥。
找到一个整数D,使得( E * D ) mod ( ( P - 1 ) * ( Q - 1 ) ) = 1成立,D就是公钥1。
设N为P和Q的乘积,N则为公钥2。
加密时先将明文转换为一个或一组小于N 的整数I,并计算I D mod N的值M,M就密文。
解密时将密文M E mod N,也就是M的E次方再除以N所得的余数就是明文。
因为私钥E与( P - 1 ) * ( Q - 1 )互质,而公钥D使( E * D ) mod ( ( P - 1 ) * ( Q- 1 ) ) = 1成立。
破解者可以得到D和N,如果想要得到E,必须得出( P - 1 ) * ( Q - 1 ),因而必须先对N进行因数分解。
如果N很大那么因数分解就会非常困难,所以要提高加密强度P和Q的数值大小起着决定性的因素。
一般来讲当P和Q 都大于2128时,按照目前的机算机处理速度破解基本已经不大可能了。
2.RSA算法的原理(1)费马小定理:有N为任意正整数,P为素数,且N不能被P整除,则有N P mod P = N(2)积模分解公式有X、Y和Z三个正整数,且X * Y大于Z,则有:( X * Y ) mod Z = ( ( X mod Z ) * ( Y mod Z ) ) mod Z(3)有P和Q两个互质数,如果有X mod P = 0,X mod Q = 0,则有:X mod PQ = 0(4)有P和Q两个互质数,设有整数X和Y满足Y mod P = X,Y mod Q = X,则有:Y mod PQ = X(5)有P和Q两个互质数,设有整数X和Y满足Y mod PQ = X ,则有:Y mod P = X,Y mod Q = X(6)RSA定理::若P和Q是两个相异质数,另有正整数R和M,其中M的值与( P - 1 )( Q - 1 )的值互质,并使得( RM ) mod ( P - 1 )( Q - 1 ) = 1。
基于RSA算法的加解密系统实现
基于RSA算法的加解密系统实现摘要:密码技术是保障信息安全的主要手段之一。
在所有的加密技术中,RSA公钥密码算法是迄今为止在理论上最为成熟、完善的公钥密码体制。
对RSA算法进行了描述,并对其加解密体制做了简要介绍。
在详细分析了其算法原理的基础上,对RSA算法进行了需求分析。
最后,实现了用java语言编写的RSA加解密系统。
关键字:RSA,公钥密码,javaImplementation of encryption and decryption system based onRSA cryptosystemAbstract:Cryptographic techniques is one of the main means to ensure information security. In all kinds of cryptographic techniques, RSA public-key cryptosystem is by far the most mature in theory, perfect public key cryptosystems. This paper introduces RSA cryptosystem and introduces the constitution of its encryption and decryption. On the basis of detailed analysis of the principle of RSA cryptosystem, the author makes needs analysis. Finally, achieve the RSA encryption and decryption system written in java.Key words : RSA, public-key cryptosystem, java一引言公钥密码体制于1976年由W.Diffie和M.Hellman提出,同时,R.Merkle也独立提出了这一体制。
RSA公钥密码算法
RSA公钥密码算法RSA公钥密码算法是一种常见的加密算法,常用于网络通信、数据传输等领域,它采用公钥与私钥相结合的方式进行加密解密,具有高度的安全性和可靠性。
下面我们将详细介绍RSA公钥密码算法的原理和实现。
RSA公钥密码算法中,每个用户都有一对不同的密钥,公钥和私钥。
公钥是公开的,可以向所有人公开,而私钥只有用户本人知道,保密性极高。
加密时使用公钥进行加密,解密时使用私钥进行解密。
RSA公钥密码算法的原理主要涉及到以下几个方面:1. 随机选择两个素数p和qRSA公钥密码算法的核心是基于数学难题,即大数分解问题。
在算法中,首先需要随机选择两个大质数p和q,它们是算法的核心秘密。
p和q不能太小,否则易被破解,也不能太大,否则计算量太大。
通常,取素数的位数越多,安全性越高。
当p和q选好后,计算N=pq。
2. 计算N和欧拉函数在算法中,N和欧拉函数φ(N)是两个重要的参数。
N=pq是两个质数的积,φ(N)表示小于N的正整数中与N互质的数目。
当p和q是不同的质数时,φ(N)=(p-1)(q-1)。
在实际应用中,我们通常选择的是越大的质数越好。
3. 选择加密密钥e在算法中,需要选定一个加密密钥e,它必须满足1<e<φ(N),且e与φ(N)互质。
加密密钥e可以公开,任何人都可以知道。
4. 计算解密密钥d在算法中,需要计算一个解密密钥d,它必须满足ed mod φ(N)=1。
解密密钥d只有用户本人知道,保密性极高。
根据扩展欧几里得算法,可以求得模φ(N)下e的逆元d。
5. 加密和解密过程在加密时,明文M先被转化为一个整数m,然后计算出密文C=me mod N,其中e是加密密钥,N是公钥中的参数。
在解密时,密文C首先被解密为明文m=Cd mod N,其中d是解密密钥,N是公钥中的参数。
6. 安全性分析RSA公钥密码算法基于大质数分解问题,因此,只有在分解N为p和q这两个质数的乘积时,才有可能破解该算法。
RSA破解算法
简单的快速分解素因数已知一个大合数n(n=pq p,q均为大素数),如果能找到另一个数m(m<n),并且使m于n有除了1以外的公约数,很显然这个公约数肯定是p或q。
那么分解大数n的问题可以转化成求n与m的最大公约数。
由于求最大公约数的效率是很高的,所以该算法的核心是寻找数m的效率。
该破解小组提供了一种能通过n快速求解m的算法。
下面是该算法的过程:已知一个数n为两个素数的乘积,首先将n转换成二进制。
下面我们以1101和1011为例来看一下,先来看一下二进作乘法的过程。
1011* 1101————101100001011+1011————10001111这是计算乘法的基本方法10001111是n,我们可以把求1011与1101的积看成是求1011、00000、101100、1011000相加。
即:1011 (第一行)00000 (第二行)101100 (第三行)+ 1011000 (第四行)————10001111 式1根据这个式子我们可以证明式1(证明略)在任何一行做加法或减法与直接在结果上做加法或减法是等价的,例如在第一行1011处减1即1011-1=1010,式1变为:101000000101100+ 1011000————1000111010001110=10001111-1。
若在第一行减掉1111即1011-1111=-100,式1变为:-10000000101100+ 1011000————1000000010000000=10001111-1111。
构造m的第一步是猜解p和q的长度,由于我们不知道p和q的长度所以只有使用穷举法测试,可以证明这个情况并不复杂。
现在我们直接看猜解到p为4位q也为4位的情况,知道p和q的长度可以构造这样的一个数,p位的数且每一位的值都为1(本例中为1111)和q位的数且每一位的值都为1(本例中为1111)的数的乘积,即:1111* 1111————111111111111————11100001用这个数1110001减去10001111,可以看作1111*1111的一行减掉1011*1101的对应的一行然后把结果相加(证明略),即1110001-10001111为:1001111100+ 100————1010010 式2凡是式1中全为0的行在式2中变为全是1(证明略)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数;m珡1 为黏贴末端“m1”的 补 序 列.第 1 种 Tile类
型(图1(a))为连接 初 始 Tile并 产 生 P 的 最 低 位
的值.第2 种 Tile类 型 (图 1(b))为 产 生 P 的 中
间位和最高位的值.对于 N 的一半以上位数到最
高位,不需要随 机 指 派 P 的 值,此 时 产 生 P 的 值
为0,如图1中第3种 Tile类型(图1(c))所示.在
随机产生整数 P 的过程 中,还 需 要 将 给 定 的 待 分 解整数复制到 上 一 层 中.如 图 1(d)所 示,在 种 子 框架的左端且用来随机指派整数 Q 的值对应的 Tile“V(Q)”中,指派 Q 的每一位的 Tile的输出值 为 0 或 1,也 不 受 输 入 值 的 限 制 . 1.2 乘 法 子 系 统
由 前 节 描 述 可 知 ,当 对 整 数 进 行 分 解 时 ,需 要 计算2个整数的 乘 积.乘 法 运 算 可 用 移 位 和 加 法 来实现.该子系统 能 对 2 个 二 进 制 整 数 作 乘 法 运 算,同时将前一 步 的 计 算 结 果 及 非 确 定 性 指 派 子 系统产生的整数P 的值传递到上一层.
用 DNA 分子来构成自组装 Tile结构,并利用 DX Tile结构建立多种复 杂 的 算 法 模 型[5].Winfree[6] 提出利用 Tile自组装结 构 进 行 计 算 的 重 要 思 想, 并证明了二维自 组 装 模 型 有 通 用 计 算 能 力.Win- free等 提 [7] 出 线 性、发 卡 和 交 叉 DNA 自 组 装 分 子 结 构 能 分 别 产 生 正 则 的 、双 线 性 的 、上 下 文 无 关
语言.研究者还 用 自 组 装 算 法 构 建 不 同 形 状 的 晶 体机 构,生 成 二 进 制 计 数 器[8],创 建 三 角 形 结 构[9],并利用它们实现任意的逻辑电路 . [10]
本文通过深 入 分 析 RSA 公 钥 密 码 系 统 的 特
收 稿 日 期 2010-01-26. 作 者 简 介 程 珍 (1981-),女 ,博 士 ,E-mail:chengzhen0716@163.com. 基金项目 国 家 高 技 术 研 究 发 展 计 划 资 助 项 目 (2009AA012413);国 家 自 然 科 学 基 金 资 助 项 目 (60803113,
为了检测2个素因子的乘积是否与给定的整 数相 等,如 何 确 定 因 子 的 值 是 非 常 重 要 的.这 里, 主要利用非确定性指派子系统并行随机产生2个 整数 P 和Q,一 旦 这 2 个 因 子 的 值 给 定 了,借 助 于自组装计算巨 大 并 行 性 的 特 点,通 过 乘 法 子 系 统可以计算出它 们 的 乘 积,即 可 检 测 待 分 解 整 数 是否能成功分解 成 2 个 素 因 子 的 乘 积.下 面 具 体 分析所创建的自组装体是如何实现随机指派 P 和Q 的值.
(1 浙江工业大学计算机科学与技术学院,浙江 杭州 310023;2 北京大学 信息科学技术学院,北京 100871;3 武汉工业学院数理科学系,湖北 武汉 430023)
摘要 研究了如何利用自组装技术对公钥密码系统 RSA 进行密码分析,提出了破译 RSA 公钥密码系统的 自 组装算法.创建3个子系统,包括非确定性指派子系统、乘 法 子 系 统 和 比 较 子 系 统,在 此 基 础 上 建 立 自 组 装 模 型,提出自组装非确定性算法将整数分解为2个素因子的乘积,该方法 用 常 量 种 类 的 Tile类 型 在 多 项 式 时 间 内能成功分解整数,且通过其并行计算的特点破译 RSA 密码系统. 关 键 词 自 组 装 算 法 ;自 组 装 模 型 ;分 解 整 数 ;破 译 ;公 钥 密 码 系 统 中 图 分 类 号 TP301 文 献 标 志 码 A 文 章 编 号 1671-4512(2011)02-0015-04
60533010,Z1100455).
· 16 ·
华 中 科 技 大 学 学 报 (自 然 科 学 版)
第 39 卷
点 ,提 出 较 简 单 的 自 组 装 模 型 结 构 ,并 给 出 基 于 自 组装算法的 RSA 公钥密码系统破译技术.
1 基于自组装算法破译 RSA 系统
根据 RSA 密码系统密钥产生的特点,可知整 数分 解 是 破 译 RSA 密 码 的 关 键 步 骤,一 旦 整 数 N 被分解为2个素 数 因 子 的 乘 积,则 根 据 解 密 算 法,计 算 过 程 就 相 对 简 单 了.为 此,提 出 一 种 非 确 定性算法将整数 分 解 为 2 个 素 因 子 的 乘 积,从 而 能 破 译 该 密 码 系 统 .主 要 创 建 3 个 子 系 统 ,包 括 非 确 定 性 指 派 子 系 统 、乘 法 子 系 统 和 比 较 子 系 统 . 1.1 非 确 定 性 指 派 子 系 统
先将待分解的整数按照从低位到高位的顺序 排列在输入的种 子 配 置 的 底 层,在 此 基 础 上 可 以 随机产生整 数 P 的 值,指 派 P 的 每 一 位 的 Tile 的输 出 端 不 受 该 Tile 的 值 的 限 制.当 随 机 指 派 Tile的值为a 时,输 出 端 为(a,b)(其 中a 和b 的 值均可取 为 0 或 1,且b 的 值 为 随 机 产 生 的 P 的 某位上的值).而 与 随 机 指 派 Tile相 连 的 Tile的 值为“a* ”,输出端为(a,0).
Abstract Self-assembly technology was studied to cryptanalyze the RSA (rivest,shamir,adleman) public-key cryptosystem,and the algorithmic self-assembly was used to decode this cryptosystem by mainly constructing three small systems which are nondeterministic guess system,multiplication sys- tem,addition system and comparing system.Then,the nondeterministic algorithm was proposed to factor an integer into the product of two large prime numbers.This method can successfully factor in- tegers in polynomial time with constant Tile types,then can decode the RSA public-key cryptosystem by parallel computing of self-assembly model. Key words algorithmic self-assembly;tile self-assemblt;factoring integers;decoding;public-key
第39卷 第2期 2011年 2月
华 中 科 技 大 学 学 报 (自 然 科 学 版) J.Huazhong Univ.of Sci.& Tech.(Natural Science Edition)
Vol.39 No.2 Feb. 2011
基于自组装算法破译 RSA 公钥密码系统
程 珍1 许 进2 周 康3
cryptosystem
Adleman[1]首次 利 用 DNA 计 算 解 决 了 组 合 优化 问 题,开 创 了 计 算 科 学 的 一 个 新 领 域.以 DNA 计算为主 的 生 物 计 算 具 有 超 大 规 模 并 行 计 算能力和巨整 数 据 存 储 能 力 等 优 势[2],使 其 成 为 发展非传统高性能计算的重要途径之一.DNA 自 组装是分子计算 中 很 重 要 的 计 算 方 法,是 一 种 由 简 单 到 复 杂 、从 无 序 到 有 序 、由 多 组 分 收 敛 到 单 一 组分的不断修 正 的 过 程[3].在 不 需 要 任 何 外 部 条 件干预下,自组装 算 法 最 终 能 使 小 瓦 片 精 确 组 成 地形 较 大 且 复 杂 的 结 构.Seeman[4]首 次 提 出 了 利
图 2 乘法子系统的基本 Tile类型
图2(a)描述的是计算 Tile结构.它用来计 算 乘 法 运 算 过 程 中 产 生 的 中 间 和 ,具 有 6 个 黏 贴 末 端 ,其 中有 3 个 代 表 输 入 的 黏 贴 末 端 H (qj,c,pi), W (n,pi+1,s)和 G(0).这 里,H (qj,c,pi)表 示 输入的变量是整 数 因 子 Q 的 第i 位qi,前 一 位 的 进位c以 及 整 数 因 子P 的 第i 位pi,且 它 们 可 以 取值0或1.W (n,pi+1,s)表 示 输 入 的 变 量 是 给 定的待分解整数 N 的当前位n,整数因子 P 的第 i+1位pi+1以 及 乘 积 结 果 S 的 当 前 位s.输 入 端 和 输 出 端 中 包 含 变 量qi,pi,pi+1 ,n,c,c′,s,s′ 的值为0或1.G(0)表示输入端的值为0 的序列. 记黏性末端x 表示值为x 的序列,黏 性 末 端x珚 表 示与x 互 补 的 序 列.在 输 入 黏 贴 末 端 的 作 用 下, 通过运 算 规 则c′= (piqj+c+s)/2,s′= (piqj + c+s)mod 2(其 中:c′为 新 产 生 的 进 位 值;s′为 新 产生的中间结果),可 以 得 到 相 对 应 的 输 出,且 该 位上 Tile的值由2部分 组 成:一 个 是 复 制 了 待 分 解整数 N 的当前位n;另 一 个 是 乘 积 结 果 S 的 当 前位s′.根据输入端的取值组 合,且 变 量 pi,pi+1, qi,n,c,s 的 值 为 0 或 1.图 2(b)为 乘 法 计 算 过 程