# PicoCTF - Crypto ## No Padding, No Problem: ![image](https://hackmd.io/_uploads/ryKLd7ZPT.png) mình nhận được một đường truy cập đến sever, thử nó thôi: `nc mercury.picoctf.net 2671` ![image](https://hackmd.io/_uploads/ry3Mb4bvT.png) đó là những gì mình nhận được, thử gửi các giá trị thì nhận được mã hóa tương ứng bằng mã hóa RSA sau khi tìm hiểu bằng từ khóa `No Padding` thì mình đã biết bài này được mã hóa bằng `homomorphic encryption` Trong bài này là mã hóa RSA cho chúng ta n và e nên mình sẽ sử dụng công thức dưới đây: $$ \mathcal{E}(m_{1}) \cdot \mathcal{E}(m_{2}) = m_{1}^{e}m_{2}^{e} \mod n \\ = (m_{1}m_{2})^{e} \mod n \\ = \mathcal{E}(m_{1} \cdot m_{2}) $$ giờ chỉ cần lấy $m_{1} = 2$ và mã hóa nó bằng RSA, thực hiện nhân với ciphertext, sau đó decrypt bằng chương trình đã cho thì nhận được $m*2$ chia 2 thì nhận được plaintext đây là cách thực hiện: ![image](https://hackmd.io/_uploads/HkgOWNZwa.png) tính $\mathcal{E}(m_{1}) \cdot \mathcal{E}(m_{2})$ với $m_{1} = 2$, $\mathcal{E}(m_{2}) = ciphertext$ ![image](https://hackmd.io/_uploads/BkLKb4Zw6.png) gửi giá trị trên vào chương trình để nhận được gtri $m*2$ ![image](https://hackmd.io/_uploads/rJfiW4WDT.png) chia 2 và chuyển về bytes để nhận flag. flag là: `picoCTF{m4yb3_Th0se_m3s54g3s_4r3_difurrent_5814368}` ## Scrambled: RSA ![image](https://hackmd.io/_uploads/BJ4W1hWDp.png) Đề cho ta một địa chỉ truy cập sever:`nc mercury.picoctf.net 58251` khi truy cập đến sever mình nhận được một đoạn flag rất dài, n và e vì flag dài quá nên mình khỏi đưa lên đây sever cho phép gửi giá trị đến và mã hóa nó ![image](https://hackmd.io/_uploads/H1RQl2WPT.png) với các bài như này mình sẽ thử các giá trị `0, 1 và -1`thì mình nhận thấy nó không tuân theo mã hóa RSA ![image](https://hackmd.io/_uploads/Bkptl2-DT.png) theo như hint của đề bài ![image](https://hackmd.io/_uploads/Syn2lnZwp.png) nên mình thử spam 1 nhiều lần thì kết quả vẫn vậy, nhưng khi spam -1 thì sau 3 lần mình nhận được kết quả khác ![image](https://hackmd.io/_uploads/SJyVZ2WwT.png) thật là ảo =)))) có thể bài này mình phải học thêm kiến thức mới nữa thì mới làm được mình gà tiếng anh nên hình như người ta bảo nhập 1 lần vô nhiều ký tự giống nhau để xem sự khác biệt. =))) cùng thử nào? ![image](https://hackmd.io/_uploads/ByTnXhWwp.png) như đã thấy thì giá trị khi đưa `a` vào encrypt chính là phần sau của `aa` thử với `ab` ![image](https://hackmd.io/_uploads/rkH3U3-Pa.png) Nhận thấy, a chỉ nằm trong `ab` nhưng không biết nó nằm ở vị trí nào và `b` thì không xuất hiện trong `ab`