cryptohack wp day (9)

Cryglz / 2023-05-13 / 原文

对称密码学

Keyed Permutations

"一对一对应"的数学术语是双射(bijection)。如果一个函数将其定义域中的每个元素映射到其值域中的唯一元素,并且反过来也是如此,那么该函数就被称为双射。在块密码的背景下,双射确保在使用特定密钥时,每个可能的输入块都映射到一个唯一的输出块,反之亦然。这种属性对于加密和解密过程的安全性和正确性至关重要。

Resisting Bruteforce

针对 AES 的最佳单密钥攻击的名称是 Biclique Cryptanalysis。这种攻击利用了AES加密过程中的特定性质,通过寻找两个具有特定关系的密文块,然后逆推它们的明文和密钥。它可以在$2{126.1}$的时间内破解AES-128,比理论上的$2$的暴力破解时间复杂度快得多,因此被认为是对AES加密的威胁。Biclique Cryptanalysis可以看作是Differential Cryptanalysis和Linear Cryptanalysis的结合,并使用了它们的一些技术和工具。
flag:crypto{Biclique}

Structure of AES

def bytes2matrix(text):
    """ Converts a 16-byte array into a 4x4 matrix.  """
    return [list(text[i:i+4]) for i in range(0, len(text), 4)]

def matrix2bytes(matrix):
    """ Converts a 4x4 matrix into a 16-byte array.  """


def matrix2bytes(matrix):
    # 获取矩阵的行数和列数
    rows = len(matrix)
    cols = len(matrix[0])

    # 创建一个空列表
    result = []

    # 按列顺序将矩阵中的每个元素添加到字节数组中
    for i in range(cols):
        for j in range(rows):
            result.append(matrix[i][j])


    # 返回生成的字节数组
    return bytes(result)

# def matrix2bytes(matrix):
#     """ Converts a 4x4 matrix into a 16-byte array.  """
#     return bytes(sum(matrix, []))


matrix = [
    [99, 114, 121, 112],
    [116, 111, 123, 105],
    [110, 109, 97, 116],
    [114, 105, 120, 125],
]

print(matrix2bytes(matrix))
#crypto{inmatrix}

Round Keys

按照题目要求给出代码:

state = [
    [206, 243, 61, 34],
    [171, 11, 93, 31],
    [16, 200, 91, 108],
    [150, 3, 194, 51],
]

round_key = [
    [173, 129, 68, 82],
    [223, 100, 38, 109],
    [32, 189, 53, 8],
    [253, 48, 187, 78],
]


def add_round_key(s, k):
    """
    对状态矩阵 s 和轮密钥 k 进行异或运算,返回一个新的状态矩阵。
    """
    # 创建一个新的状态矩阵,初始化为零
    result = [[0] * 4 for _ in range(4)]

    # 对每个位置上的元素进行异或运算
    for i in range(4):
        for j in range(4):
            result[i][j] = s[i][j] ^ k[i][j]

    return result
def matrix2bytes(matrix):
#     """ Converts a 4x4 matrix into a 16-byte array.  """
     return bytes(sum(matrix, []))

print(matrix2bytes(add_round_key(state, round_key)))