티스토리 뷰
(WebGoat) A2. Cryptographic Failures - Crypto Basics #3 Signature
SalaYH 2024. 3. 24. 02:02이번 세션은 서명과 관련된 내용이다.
우선 이번 세션은 자주 접하지 못했던 부분이라 온전히 혼자 힘만으로 해결할 수 없었고, 다른 유튜버가 풀이한 내용을 많이 참고하여 진행하였다.
https://www.youtube.com/watch?v=9lQJa4zHRYM
우선 해당 세션에서는 RSA 암호화 알고리즘에 대한 Private Key를 제공할 때, Pubilc Key에 대한 Modulus를 구하고, 이 Modulous를 이용한 서명을 확인하라는 퀴즈를 제공하고 있다.
사실 나는 Modulus가 무엇인지 부터 막막했다. 이럴땐 역시 ChatGPT에게 문의해본다.
Modulus는 Public Key에 저장되고, 이 값은 암호화나 서명 검증 등에 사용된다는 것을 확인할 수 있었지만, 여전히 완전히 이해가 되지 않는다. (암호화는 항상 깊게 파고들면 너무 어려운 것 같다...)
우선 Modulus는 Public Key에 저장된다고 하였으니, OpenSSL을 통해서 Public Key를 생성해 보자.
이제 다시 OpenSSL을 이용하여 Pubilc Key에 저장된 Modulus를 확인해보자
여기까진 확인하였는데, 이제 이 Modulus를 이용해서 확인하였는데, 이제 여기서 서명을 어떻게 만들어야 할지 모르겠어서, 다시 ChatGPT에게 문의하였다.
하지만 어찌된 일인지 서명을 생성할 때 데드락이 자꾸 걸리고 서명이 생성되지 않았다.
오랜시간 확인해보았으나 원인을 알 수 없었고, 결국 서두에 이야기 했었던 유튜브를 통해 이 문제를 풀 수 있었다.
이번에는 openssl 명령어가 아닌 유튜브 내용과 동일하게 Java 코드를 통해 생성하였다.
public class Main {
public static void main(String[] args) throws Exception {
String modulus = "AE17108C719E1873F5B8306AB2B43FADAAFFA2........";
String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKc........";
final PrivateKey key = getPrivateKey(privateKey);
final Signature instance = Signature.getInstance("SHA256withRSA");
instance.initSign(key);
instance.update(modulus.getBytes("UTF-8"));
final String signature = new String(Base64.getEncoder()
.encode(instance.sign()), Charset.forName("UTF-8"));
System.out.println("Signature ===========");
System.out.println(signature);
}
private static PrivateKey getPrivateKey(String key) throws Exception {
final byte[] decoded = Base64.getDecoder().decode(key);
final PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(decoded);
final KeyFactory factory = KeyFactory.getInstance("RSA");
return factory.generatePrivate(spec);
}
}
이렇게 Modulus와 Signature를 확인하여 이번 퀴즈도 통과하게 되었다.
RSA 알고리즘은 정말 자주 사용하고 자주 접하지만, 지금처럼 Modulus를 구하고, 이를 통해 또 서명을 생성하는 것은 직접 해본 적은 없었다. 주로 RSA를 사용할 때, PRIVATE KEY가 노출되지 않는지, 키길이는 충분한지 등에 대해서만 확인하였었기 때문에 이번 문제는 상당히 많은 시간을 소요했고, 결국 다른 이의 도움으로 문제를 풀 수 있었다. 이후에 시간이 될 때 이 부분은 좀 더 파보면서 애플리케이션 보안리뷰에 활용할 수 있는 부분이 무엇이 있는지 한 번 더 검토해 보아야 겠다.
'Web Analytics > WebGoat' 카테고리의 다른 글
- Total
- Today
- Yesterday