8000
Skip to content

Bitstream analysis tool in Python for verifying Golomb postulates (balance, runs, and autocorrelation).

License

Notifications You must be signed in to change notification settings

Nespre/lrn-bitstream-verifier

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 

Repository files navigation

PRESSUPOSTOS DE GOLOMB - Criptografia

Ferramenta em Python para análise de sequências binárias com base nos postulados de Golomb: balanceamento, distribuição de sequências e autocorrelação.

Este programa realiza a análise de uma sequência binária para verificar se ela cumpre os três pressupostos de Golomb:

  1. Proporção entre zeros e uns: Percentagens de 0’s e 1’s dentro de uma margem aceitável.
  2. Frequência de subsequências de tamanhos diferentes: Blocos menores devem ocorrer mais vezes que blocos maiores.
  3. Distribuição equilibrada de padrões binários: Evita repetições ou “espelhamentos” indesejados.

Nota: Este projeto é apenas para fins educacionais.


Índice



Como Funciona?

  1. O programa apresenta duas opções:

    • Analisar uma sequência existente;
    • Gerar uma nova sequência (aleatória ou que cumpra os pressupostos).
  2. Para Análise:

    • Recebe uma sequência binária do usuário.
    • Extrai dados básicos: número de bits, blocos contínuos, frequências e tamanhos em ordem.
    • Verifica cada um dos três pressupostos, acumulando informações sobre conformidade, avisos relevantes e alertas.
    • Exibe um relatório final com ✔/✘ e mensagens de alerta.
  3. Para Geração:

    • O usuário pode gerar uma sequência binária aleatória ou que satisfaça os pressupostos de Golomb.
    • O programa solicita o comprimento da sequência e os pressupostos a serem ativados.
    • Tenta gerar até 5.000 sequências aleatórias que cumpram os requisitos.
    • Exibe a sequência válida gerada.



Como Usar?

  1. Clone o repositório:
    git clone https://github.com/Nespre/bitstream-verifier.git

  2. Navegue até o diretório do projeto:
    cd bitstream-verifier

  3. Execute o script Python desejado. Exemplo:
    pressuposto_golomb.py



Parâmetros

Estes valores são internos ao programa e representam os dados usados em cada verificação:

  • num_bits (dict): Contagens totais de bits

      all: número de bits,
      zeros: contagem de 0’s,
      ones: contagem de 1’s.
    
  • runs (dict): Listas de blocos contínuos encontrados em

      all,
      zeros,
      ones.
    
  • run_frequencies (dict): Frequência de ocorrência de cada tamanho de bloco em

      all,
      zeros,
      ones.
    
  • ordered_run_sizes (dict): Tamanhos dos blocos, na ordem em que aparecem, em

      all,
      zeros,
      ones.
    
  • postulates (dict): Para cada pressuposto (1, 2 e 3), armazena:

      comply (bool),
      relevants (list[str]),
      warnings (list[str]).
    



Tipos de Verificação por Pressupostos

Pressuposto 1 – Proporção de Bits

Função: check_first_postulate()
Verifica se a proporção de 0's e 1's está dentro de um limite mínimo aceitável com base no comprimento da sequência.

Regras:
A percentagem mínima permitida para cada bit (0 ou 1) depende do comprimento da sequência:

  • ≤ 10: 40.00%
  • 11–20: 0.5 * length + 35 (ex: length 16 → 43.5%)
  • 21–1000: 41.6 + 1.15 * ln(length)
  • > 1000: 49.00%

Exemplo:

	Sequência: 00001001
	0's: 75.00%
	1's: 25.00%
	Mínimo permitido: 40.00%
	→ ⚠️ Não cumpre pressuposto 1

Pressuposto 2 – Frequência de Blocos

Função: verify_frequency_runs() Verifica se blocos menores ocorrem com mais frequência que blocos maiores.

Regras:

  • Um bloco de tamanho n deve ser mais frequente que um de tamanho n+1.
  • Se houver empate ou inversão de frequência, o pressuposto é violado.
  • Avisos opcionais são emitidos se a diferença for pequena.

Exemplo:

Tamanhos: [1, 1, 2, 2]
Contagem: [2, 2]
→ Frequências iguais → ⚠️ Não cumpre

Pressuposto 3 – Autocorrelação

Verificações relacionadas a padrões, simetrias ou repetições estruturais nos blocos.
Função: verify_sizes_pattern() Identifica padrões repetidos nos tamanhos dos blocos.

Regras:

  • 2 blocos iguais consecutivos → ⚠️ Relevante
  • 3 blocos com 2 repetições → 🔍 Aviso
  • 3 blocos com 3+ repetições → ⚠️ Relevante
  • 4+ blocos com 2+ repetições → ⚠️ Relevante
  • Padrões só de tamanho 1 são ignorados

Exemplo:

Tamanhos: [1, 2, 2, 1, 1, 2, 1, 1]
→ [2,1,1] se repete 2x → 🔍 Aviso

Função: verify_excessive_run_frequency() Detecta se um tamanho específico ocorre em excesso, usando limites baseados em formulas.

Regras:

  • Relevante se ultrapassa: max(40, 70 - 14 * log10(num_blocos))
  • Aviso se ultrapassa: max(35, 60 - 14 * log10(num_blocos))
  • Separado para blocos de 0 e de 1.

Exemplo:

Blocos de '1': [1,1,1,1,111]
→ 1 aparece 80% → ⚠️ Relevante

Função: verify_successively_same_size() Verifica blocos consecutivos com mesmo tamanho.

Regras:

  • Até 3 blocos de tamanho 1–2 → 🔍 Aviso
  • 3–4 blocos de tamanho >2 → ⚠️ Relevante
  • 5+ blocos consecutivos (qualquer tamanho) → ⚠️ Relevante
  • 2 blocos consecutivos de tamanho ≥ 4 → ⚠️ Relevante

Exemplo:

Tamanhos: [2,2,2,2,2]
→ 5 blocos de tamanho 2 → ⚠️ Relevante

Função: verify_mirror_pattern() Detecta padrões simétricos (espelhados) com base no centro da sequência.

Regras:

  • Padrões de 5 blocos → 🔍 Aviso
  • Padrões de 7+ blocos → ⚠️ Relevante
  • Só analisa número ímpar de blocos

Exemplo:

Blocos: [0,1,0,111,0,1,0]
→ Padrão espelhado de 7 blocos → ⚠️ Relevante

Função: verify_match_between_zeros_and_ones() Compara padrões entre blocos de 0 e blocos de 1 em termos de padrão e proporção.

Regras (modo EXATO):

  • Blocos exatamente iguais com mesma quantidade → ⚠️ Relevante
  • Alternância perfeita > 5 blocos → ⚠️ Relevante
  • 4+ blocos iguais → ⚠️ Relevante
  • 3 blocos iguais com soma ≥ 8 → ⚠️ Relevante
  • 3 blocos iguais com soma < 8 → 🔍 Aviso

Regras (modo RELATIVO):

  • Qualquer padrão → 🔍 Aviso

Exemplo:

Blocos 0: [3,1,1,3,1]
Blocos 1: [1,1,3,1,1]
→ Padrão [1,1,3,1] → ⚠️ Relevante



Exemplo de Resultado

Pressupostos de Golomb analisados:

  1. Proporção (✔)
  2. Frequência (✘) — “Blocos de tamanho 1 (5) não mais frequentes que tamanho 2 (5)”
  3. Padrões (✘) — “Repetição de [00 1]”

Tabela Resumo:

Pressuposto Status Mensagens
1
2 Blocos de tamanho 1 não são mais frequentes
3 Padrão [00, 1] repete-se



Contribuição

Sinta-se à vontade para contribuir! Abra um pull request ou crie um issue para discutir melhorias.



Licença

Este projeto está licenciado sob a MIT License. Veja LICENSE para mais detalhes.

About

Bitstream analysis tool in Python for verifying Golomb postulates (balance, runs, and autocorrelation).

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

0