본문 바로가기

디지털포렌식(Digital forensic)/그림

[파일]암호를 가리는 모자이크 암호(Mosaic Cipher)

반응형

 

모자이크 암호(Mosaic Cipher)는 텍스트나 데이터를 암호화하는 방법이다.
문자나 숫자를 모자이크 패턴으로 변환하여 암호화한다.
이 방법은 시각적으로 이해하기 어렵게 만들어져서 해독하기 어려운 특징을 가지고 있다.
모자이크 암호는 주로 일반적인 대칭 암호화나 공개 키 암호화와는 다른 방식이다.

시각적 복잡성
모자이크 패턴은 시각적으로 복잡하고 혼란스러워 해독하기 어렵다.
각 문자 또는 숫자를 모자이크 형태로 변환하면서 원본 데이터를 인식하기 어렵게 만든다.

패턴 변경
모자이크 암호에서 사용되는 패턴은 변환 키 또는 암호화 방법에 따라 변경된다.
이렇게 하는 이유는 해독자가 패턴을 예측하기 어렵게 만들기 위해서다.

해독 키
모자이크 암호를 사용하려면 해독자가 해당 암호화 방법을 알고 있는 해독 키가 필요하다.
이 키 값을 알지 못하면 암호화된 데이터를 이미지 처리로 해독하는건 무척 어렵다.
모자이크 암호의 기본 원리는 원본 데이터를 모자이크 패턴으로 변환하는 것이다.
모자이크 패턴으로 암호화된 데이터를 다시 원래 형태로 복원하려면 암호화 키를 알아야만 한다.

모자이크 암호는 주로 간단한 데이터 또는 메시지를 암호화하는 데 빠르게 사용하기에 적합하다.
큰 양의 데이터를 처리하기에는 복잡성과 시스템적 부하가 많이 걸려 시간이 걸린다.


보안성
모자이크 암호는 이미 암호화된 메시지라는 것을 보여주기 때문에
전문적인 암호 분석가에 의해 공격에 노출될 가능성이 높다. 

 

첨부한 소프트웨어는 모자익을 만들 파일을 선택하고 수행(run)을 실행하면 모자익 이미지로 만들어준다.

 

 

코드에서는 원본 이미지의 픽셀을 확인한 후에

각 픽셀마다 모자이크 할 평균 색상을 추출하고
각 픽셀마다 평균 색상값에 맞춰 모자이크된 비트맵 파일로 만들어낸다.

Imports System.Drawing.Imaging

Public Class Form1
    Private MosaicSize As Integer = 10
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim openFileDialog As New OpenFileDialog()
        openFileDialog.Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp|All Files|*.*"

        If openFileDialog.ShowDialog() = DialogResult.OK Then
            PictureBox1.Image = Image.FromFile(openFileDialog.FileName)
        End If
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs)
        Dim openFileDialog As New OpenFileDialog()
        openFileDialog.Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp|All Files|*.*"

        If openFileDialog.ShowDialog() = DialogResult.OK Then
            PictureBox2.Image = Image.FromFile(openFileDialog.FileName)
        End If
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        ' PictureBox1의 이미지를 모자이크 처리한 후 PictureBox2에 표시한다.
        If PictureBox1.Image IsNot Nothing Then
            Dim originalImage As Bitmap = New Bitmap(PictureBox1.Image)
            Dim mosaicImage As Bitmap = Mosaic(originalImage, MosaicSize)
            PictureBox2.Image = mosaicImage        
        End If
    End Sub

    Private Function Mosaic(ByVal sourceImage As Bitmap, ByVal mosaicSize As Integer) As Bitmap
        Dim width As Integer = sourceImage.Width
        Dim height As Integer = sourceImage.Height
        Dim mosaicImage As New Bitmap(width, height)

        For x As Integer = 0 To width - 1 Step mosaicSize
            For y As Integer = 0 To height - 1 Step mosaicSize
                Dim mosaicColor As Color = GetMosaicColor(sourceImage, x, y, mosaicSize)
                For i As Integer = 0 To mosaicSize - 1
                    For j As Integer = 0 To mosaicSize - 1
                        If x + i < width AndAlso y + j < height Then
                            mosaicImage.SetPixel(x + i, y + j, mosaicColor)
                        End If
                    Next
                Next
            Next
        Next

        Return mosaicImage
    End Function

    ' 모자이크 처리할 영역의 평균 색상을 가져옴
    Private Function GetMosaicColor(ByVal sourceImage As Bitmap, ByVal x As Integer, ByVal y As Integer, ByVal mosaicSize As Integer) As Color
        Dim totalR As Integer = 0
        Dim totalG As Integer = 0
        Dim totalB As Integer = 0
        Dim pixelCount As Integer = 0

        For i As Integer = 0 To mosaicSize - 1
            For j As Integer = 0 To mosaicSize - 1
                If x + i < sourceImage.Width AndAlso y + j < sourceImage.Height Then
                    Dim pixel As Color = sourceImage.GetPixel(x + i, y + j)
                    totalR += pixel.R
                    totalG += pixel.G
                    totalB += pixel.B
                    pixelCount += 1
                End If
            Next
        Next

        Dim averageR As Integer = totalR / pixelCount
        Dim averageG As Integer = totalG / pixelCount
        Dim averageB As Integer = totalB / pixelCount

        Return Color.FromArgb(averageR, averageG, averageB)
    End Function

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub
End Class

가장 안전한 암호는 암호인지 아닌지 모르게 만든다.

 

WindowsFormsApp1.zip
0.06MB

728x90