(基于论文:Secure framework for IoT technology based on RSA and DNA cryptography ----Egyptian Journal of Medical Human Genetics)
DNA回文序列:在分子生物学中,DNA回文序列(Palindrome Sequence) 是一种特殊的双链DNA结构,其特点是:两条互补链上的碱基序列在正读和反读时相同(需遵循碱基互补配对原则)示例:
5'-GAATTC-3' → 正读序列
3'-CTTAAG-5' → 互补链反向序列(从右向左读:5'-GAATTC-3')
限制性内切酶识别:多数限制酶(如EcoRI)切割回文序列的中心位置。
5'-G↓AATTC-3'
3'-CTTAA↑G-5' // 切割后产生粘性末端
(那么问题来了,多数限制酶切割后会产生粘性末端。这个时候为了避免玩家攻击出题人,我们还是要严谨一点的,所以有没有方法可以去掉粘性末端呢?有的,兄弟,有的)
常见平末端回文序列:
限制酶 | 识别序列 | 切割位置 |
---|---|---|
EcoRV | GATATC | GAT↓ATC |
SmaI | CCCGGG | CCC↓GGG |
HaeIII | GGCC | GG↓CC |
这样一来,我们的题目就可以不用给什么c1,c2,n1,n2这些的了,全部写在一条链子上,中间用回文序列切割就可以了,到时候题目就给一根长DNA链子,嘻嘻
方法一: 按规则转换四进制数字 → DNA碱基:(0 → A, 1 → T, 2 → C, 3 → G)然后按RSA开打,信息用回文序列分割
方法二: DNA是二进制映射 → ATCG → 00 01 10 11 后续同上
方法三: 给出另一条DNA单链,要求用原来的DNA链(碱基互补配对)后续同上
方法四: 众所周知(其实我不知道,早忘了),DNA合成蛋白质的过程中,识别的是3个一组一组的(ATC,CCG,TCA)这样,用密码子去读,所以我们不妨拓展思路,以DNA编码合成的蛋白质链作为
AUG → 甲硫氨酸(Met,起始密码子)
UAA, UAG, UGA → 终止密码子(不编码氨基酸
难点:阅读框偏移,不固定开头起始位置,需要玩家自己去找AUG(密码子),但可能出现多个AUG,需要每个都试试
就拿最简单的RSA举例:
from Crypto.Util.number import *
import gmpy2
flag = b"flag{Test123!}"
p = getPrime(128)
q = getPrime(128)
n = p * q
e = 65537
phi = (p-1)*(q-1)
d = pow(e, -1, phi)
m = bytes_to_long(flag)
c = pow(m, e, n)
def int_to_dna(num):
quat = gmpy2.digits(num, 4) # 转换为四进制
mapping = {'0': 'A', '1': 'T', '2': 'C', '3': 'G'}
return ''.join(mapping[d] for d in quat)
# 转换为DNA格式
e_dna = int_to_dna(e)
n_dna = int_to_dna(n)
c_dna = int_to_dna(c)
output = e_dna + "CCCGGG" + n_dna + "CCCGGG" + c_dna
print("DNA Output:")
print(output)
output:
DNA Output:
TAAAAAAATCCCGGGCAGGAGACAGGTATTAAGGCTTTTACGGTGATCACCTGTACAAAGTCGCGTATTTTACATAGATCTATGAGACGATAGCGCATCAGTAAGACATCGTGGTATAGAATCCTTAACACAGCTAGTCGGCGCCCGGGTTTTTTAGGTAGTTCACTCGTTCAGCGTCCCTCCGTGTCGTGTCAGCTGGCCGCGCAATCGAAAACTGAAGTTTTGCGTTACACTTTGCCGCCCGAACTCAGCGCTATATGTCGTTAAGGTGATTCTA
然后解密:
效果还是不错的
到这里,理论成立,可以开始出题了,基本上大部分的RSA题目都可以用这个逻辑套用。目前用这个思路出了一些题,但是比赛还没打,等打完这边会出WP,具体细节届时再补充完善,求求关注喵
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。